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!')
Respuesta
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.
¿Por qué no simplemente escribir '\ d'? – Graduate
Bueno, no funciona, comprobé ... – Graduate
@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
!
se utiliza como delimitador, \d
coincide con el dígito simple.
Es lo mismo que /[0-9]/
Gracias, pensé que siempre debes usar el caracter "/". No sabía que podía sustituirlo. – Graduate
- 1. ¿Hay una expresión regular compatible con Perl para recortar el espacio en blanco de ambos lados de una cadena?
- 2. ¿Qué significa esta sintaxis^carente, con vacío en ambos lados?
- 3. Barra de progreso redondeada en ambos lados en Android
- 4. Python "join" en ambos lados de las cadenas?
- 5. Coincidir con la expresión regular
- 6. Establecer la orientación al paisaje en Android en ambos lados
- 7. Plantillas de expresión en D
- 8. expresión regular con -, ::, (y)
- 9. actualización de MySQL con expresión regular
- 10. Color de fondo diferente a ambos lados de la página
- 11. ¿Qué significan los signos de exclamación en el archivo yml de traducción Rails i18N?
- 12. Java expresión regular con un guión
- 13. Exclusivo O en expresión regular
- 14. expresión regular "contiene" otra expresión regular
- 15. ¿Expresión regular para encontrar una expresión regular?
- 16. Python lambda con expresión regular
- 17. Simplifica una expresión regular compleja
- 18. tipo Bash con expresión regular
- 19. coincidencia de expresión regular en la
- 20. expresión regular en iOS
- 21. Error de sintaxis con parse_ini_file() cuando el valor del archivo contiene signos de exclamación e iguales
- 22. Coincidencia con una expresión regular en Scala
- 23. Crear un plano, agregar una textura en ambos lados y girar el objeto en uno de sus lados
- 24. Expresión regular URL de Gruber en Python
- 25. ¿Cómo elimino las letras, los guiones y los signos de dólar en una cadena con una expresión regular?
- 26. ¿Cómo usar la expresión regular con caracteres opcionales en python?
- 27. copia de Emacs con expresión regular
- 28. expresión regular de Java con lookahead
- 29. Comprobación de diacríticos con una expresión regular
- 30. Determinar si la cadena es de longitud par o impar con expresión regular
¿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
¡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. –