2011-04-22 15 views
72

Quiero hacer coincidir dos contraseñas con la expresión regular. por ejemplo, tengo dos entradas "123456" y "1234567", entonces el resultado no debe coincidir (falso). Y cuando ingresé "123456" y "123456", el resultado debería coincidir (verdadero).expresión regular para la coincidencia exacta de una palabra

No pude hacer la expresión. Alguien puede ayudarme, por favor.

+7

¿por qué quiere regex en este caso? La comprobación de la igualdad (exacta) realmente debería hacerse sin expresiones regulares. –

+0

Porque buscamos cómo reemplazar texto en un script Bash y obtenemos una respuesta que involucra a Perl y regex. – sudo

+0

teniendo el mismo problema una mejor solución^(123456) dará los resultados que desea – sdx11

Respuesta

91

si usted tiene una contraseña de entrada en una variable y que desea hacer coincidir exactamente 123.456 continuación anclas le ayudarán a:

/^123456$/ 

en Perl la prueba para hacer coincidir la contraseña sería algo así como

print "MATCH_OK" if ($input_pass=~/^123456$/); 

EDIT:

bart kiers se tho bien, ¿por qué no utilizar un strcmp() para esto? cada lengua tiene su propia manera

como un segundo pensamiento, es posible que desee considerar un mecanismo de autenticación más seguro :)

+0

FYI: para mí solamente^123456 $ funciona en el probador vinculado a continuación. – Tilo

+0

Gracias por las anclas, sabía que, pero completamente no pensaron en ello :) – vikingsteve

4

Un camino a seguir más recta es para comprobar la igualdad embargo

if string1 == string2 
    puts "match" 
else 
    puts "not match" 
end 

, si realmente quiere meter a la expresión regular,

string1 =~ /^123456$/ 
+0

@Kurumi que estoy tratando de hacer que el código Java que buscar una palabra específica en el archivo txt y quiero usar regx así podría utilizar ese patrón/^ myword $/con String.match (/^myword $ /) para buscar la palabra en ese txt? – Tony

2

también puede probar añadiendo un espacio al principio y al final de la palabra clave: /\s+123456\s+/i.

+0

No pude hacer que este método funcionara usando '\ s' a través de: https://regex101.com/ – natureminded

77

En la respuesta de malfaux '^' y '$' se ha utilizado para detectar el principio y el final del texto.
Estos se usan generalmente para detectar el comienzo y el final de una línea.
Sin embargo, esta puede ser la forma correcta en este caso.
Pero si desea hacer coincidir una palabra exacta, la forma más elegante es usar '\ b'. En este caso, el siguiente patrón coincidirá con la frase exacta "123456".

/\ b123456 \ b/

+0

¿Estás seguro de que funciona de esa manera? ;) Utilice un probador de expresiones regulares como [este] (http://www.regular-expressions.info/javascriptexample.html). Usa el botón "mostrar coincidencia" y verás por qué coincide. Por cierto recuerda '.' es un char especial y bueno para escapar de él. (y es bueno pensar dos veces antes de votar: D). – prageeth

+0

Se anuló mi edición y puede provocar que las personas introduzcan errores en sus programas si intentan hacer coincidencias exactas con cadenas como URI o contraseñas (esta última era el tema del PO) que a menudo contienen caracteres que no son palabras. He visto este error en el código de producción, no es bueno. Si no me permite aclarar su respuesta, hágalo usted mismo. – 0x1mason

+1

Si cree que mi respuesta es engañosa o incorrecta, igual puede publicar su propia respuesta (como hacen otras personas) o hacer un comentario debajo de mi publicación explicando su sugerencia. – prageeth

18
(?<![\w\d])abc(?![\w\d]) 

esto se asegura de que su partido no está precedido por un poco de carácter, número o guión y no es seguida inmediatamente por carácter o número o guión

tal manera que coincida "abc" en "abc", "abc"., "abc", pero no "4abc", ni "ABCDE"

+1

El título de la pregunta es engañoso; él está tratando de asegurarse de que dos * cuerdas completas * sean exactamente iguales. Además, '\ w' coincide con dígitos y letras, por lo que' [\ w \ d] 'es redundante. –

Cuestiones relacionadas