2011-01-03 16 views
9

Duplicar posible:
A Regex that will never be matched by anything¿Una simple expresión regular de Perl garantiza que nunca coincidirá con una cadena?

que tiene una secuencia de comandos que toma una expresión regular como un parámetro. Por defecto Quiero configurar la expresión regular a algo que nunca coincidirá con cualquier cadena, por lo que puedo decir simplemente

if ($str =~ $regex) 

sin p tener que marcar definido ($ regex) primero.

me ocurrió con

qr/[^\s\S]/ 

pero no saben si esto va a coincidir con un poco de carácter UTF-8 que no es ni un espacio ni un no-espacio.

Respuesta

20
+0

solución de MJD es mejor que cualquier otra cosa que se ofrece aquí o en la supuesta pregunta DUP que este merece ser conservado. – tchrist

+0

@tchrist: Desde mi punto de vista, ciertamente estrecho, casi cualquier cosa de MJD es oro puro. El hombre es un alquimista de Perl o algo así. – Hugmeir

+0

Para iluminar: el patrón vacío '//' o '(? :)' no afirma nada y, por lo tanto, siempre coincide. '(?!)' es un lookahead negativo para el patrón vacío (lo que viene entre '!' y the ')' es el cuerpo de la aserción) y, por lo tanto, nunca puede coincidir. – hobbs

5

Combina un aspecto negativo para un carácter arbitrario seguido de una coincidencia para ese personaje, p.

/(?!x)x/ 

Funciona en todos los casos de prueba que arrojé. Aquí hay algunas pruebas en rubular.

4

/ ^/ parece que lo hace, y es corto (est).

Cuestiones relacionadas