2012-09-25 16 views
10

He visto la expresión regular '!\d!' dentro de la función PHP preg_match. ¿Qué diablos es esto?Expresión regular con signos de exclamación en ambos lados ('! D!')

+7

¿Qué significa la downvotes? Podría estar redactado mejor, pero creo que esta es una pregunta razonable. La búsqueda de signos de puntuación es básicamente imposible y está a tres clics de la página del documento 'preg_match' en la página de documentos de PCre regex regex. Y tienes que saber que estás buscando "delimitador de expresiones regulares", pero ya sabes la respuesta ... – verdesmarald

+0

¡He estado codificando PHP durante años y nunca había visto! ¡usado como un delímetro! Busqué en Google y encontré esta pregunta muy útil. PD Sospecho que no se usa como delimitador porque hace que el código sea menos legible. A primera vista, interpreté que la marca de exclamación significa "No" o "Coincidencia negativa", creo que muchos otros también lo hacen, así que lo evitan a favor de la legibilidad. –

Respuesta

12

Desde el PHP PCRE docs:

Al utilizar las funciones de PCRE, se requiere que el patrón está rodeado por delimitadores. Un delimitador puede ser cualquier carácter no alfanumérico, no de barra invertida ni de espacio en blanco.

En este caso, simplemente está usando ! como delimitador. A menudo se usa si desea usar el delimitador normal dentro de la expresión regular sin tener que escapar de él. No es realmente necesario en este caso, ya que el resto de la expresión regular es simplemente \d, pero es útil para cosas como comprobar que una ruta contiene más de tres niveles de directorio. Puede utilizar cualquiera de:

/\/.*\/.*\/.*\/ blah blah blah/

o:

!/.*/.*/.*/ blah blah blah ! 

ahora no se han probado completamente, y puede no funcionar en su totalidad como se anuncia, pero debe obtener la idea general del re escape mínimo necesario.

Otro ejemplo (de la página vinculada a arriba) es comprobar si una cadena comienza con el http:// marcador. Cualquiera de estos dos:

/^http:\/\// 
!^http://! 

sería suficiente, pero el segundo es más fácil de entender.

+0

¿Por qué no simplemente escribir '\ d'? – Graduate

+0

Bueno, no funciona, comprobé ... – Graduate

+0

@Graduate, querías saber qué significaba la expresión regular. También proporcioné una razón por la cual los delimitadores alternativos pueden ser útiles, con la revelación completa de que puede necesitar ser corregido. La intención era simplemente mostrar cuánto _cleaner_ puede ser una expresión regular mediante el uso de delimitadores alternativos, no sugerí que debe utilizar esas muestras (al menos no sin depurar y corregir el bit 'blah blah blah'). – paxdiablo

5

! se utiliza como delimitador, \d coincide con el dígito simple.

Es lo mismo que /[0-9]/

+1

Gracias, pensé que siempre debes usar el caracter "/". No sabía que podía sustituirlo. – Graduate

Cuestiones relacionadas