Referencia - ¿Qué significa esta expresión regular?
¿Que es esto?
Esta es una colección de preguntas y respuestas comunes. Esto también es un Wiki de la comunidad, por lo que todos están invitados a participar en su mantenimiento.
¿Por qué es esto?
regex está sufriendo de darme el tipo de código ze de preguntas y respuestas deficientes sin explicación. Esta referencia está destinada a proporcionar enlaces a preguntas y respuestas de calidad.
Cual es el alcance?
Esta referencia está destinada a los siguientes lenguajes: php , perl , javascript , python , ruby , java , .net .
Esto puede ser demasiado amplio, pero estos lenguajes comparten la misma sintaxis. Para funciones específicas, está la etiqueta del idioma detrás de ella, ejemplo:
- ¿Qué son los grupos de equilibrio de expresiones regulares? .red
Respuestas
Preguntas frecuentes sobre expresiones regulares de desbordamiento de pila
Vea también muchas sugerencias generales y enlaces útiles en la página de detalles de la etiqueta regex .
Tutoriales online
Cuantificadores
- Cero o más:
*
: codicioso ,*?
: reacios ,*+
: posesivo - Uno-o-más:
+
: codicioso ,+?
: reacios ,++
: posesivo ?
: opcional (cero o uno)- / Rangos MAX MIN (todo incluido):
{n,m}
: entre n y m ,{n,}
n-o-más ,{n}
: exactamente n - Diferencias entre cuantificador codicioso, reacio (también conocido como "perezoso", "desaforado") y posesivo:
- Cuantificadores codiciosos versus reacios versus posesivos
- Discusión en profundidad sobre las diferencias entre codiciosos y no codiciosos
- ¿Cuál es la diferencia entre
{n}
y{n}?
- ¿Alguien puede explicarme los cuantificadores posesivos? php , perl , java , ruby
- Emulando cuantificadores posesivos .net
- Referencias que no son de desbordamiento de pila: de Oracle , regular-expressions.info
Clases de personajes
- ¿Cuál es la diferencia entre corchetes y paréntesis?
[...]
: cualquier carácter[^...]
,: negado / cualquier carácter excepto[^]
coincide con cualquier carácter, incluidas las nuevas líneas javascript[\w-[\d]]
/[a-z-[qz]]
: establecer resta .net , xml-schema , xpath , JGSoft[\w&&[^\d]]
: establecer intersección java , ruby 1.9+[[:alpha:]]
: Clases de caracteres POSIX- ¿Por qué
[^\\D2]
,[^[^0-9]2]
,[^2[^0-9]]
obtener resultados diferentes en Java? Java - Taquigrafía:
- Dígitos:
\d
: dígitos ,\D
: no sea un dígito - Palabra carácter (letra, número, un guión):
\w
: carácter de palabra ,\W
: el carácter no-palabra - Los espacios en blanco:
\s
: espacio en blanco ,\S
: no está en blanco
- Dígitos:
- Categorías Unicode (
\p{L}, \P{L}
, etc.)
Secuencias de escape
- Espacio en blanco horizontal:
\h
Espacio-o-tab ,\t
: pestaña - Nuevas líneas:
- Secuencias de espacios en blanco negadas:: carácter de espacio en blanco
\H
no horizontal,: carácter de espacio en blanco\V
no vertical,: carácter\N
de alimentación de línea no pcre php5 java-8 - Otros:
\v
: tabulación vertical ,\e
: el carácter de escape
Anclas
^
: inicio de la línea / entrada ,\b
: límite de la palabra, y\B
: límite de palabra ,$
: final de línea / entrada\A
: inicio de entrada\Z
,: fin de entrada php , perl , ruby\z
: el final de la entrada (\Z
en Python) .net , php , pcre , java , ruby , icu , swift , objetivo-c\G
: inicio de partido php , perl , ruby
(Consulte también "Información específica de sabor → Java → Las funciones en Matcher
")
Grupos
(...)
: grupo de captura ,(?:)
: grupo sin captura\1
: referencia inversa y referencia de grupo de captura,: referencia de$1
grupo de captura- ¿Qué significa un subpatrón
(?i:regex)
? - ¿Qué significa la 'P' en
(?P<group_name>regexp)
? (?>)
: grupo atómico o grupo independiente ,(?|)
: reinicio rama- Grupos de captura con nombre:
- Referencia de grupo de captura con nombre general en
regular-expressions.info
- java :
(?<groupname>regex)
: Información general y reglas de nomenclatura (enlaces no desbordamiento de pila) - Otros idiomas: Python , .NET , Perl , y php
(?P<groupname>regex)
(?<groupname>regex)
(?<groupname>regex)
(?P<groupname>regex)
(?<groupname>regex)
- Referencia de grupo de captura con nombre general en
Lookarounds
- Los símbolos de anticipación:
(?=...)
: positivo ,(?!...)
: negativo - Lookbehinds:
(?<=...)
: positivo ,(?<!...)
: negativo (no soportado por javascript ) - Mirar más allá de los límites en:
- Alternativas retrospectivas:
Modificadores
- La mayoría de los sabores:
g
: global ,i
: entre mayúsculas y minúsculas ,u
: Unicode ,x
: espacio en blanco extendido c
: posición actual perle
: expresión php perlo
: once rubym
: multilínea php perl pitón javascript .NET java ,m
: (no) de varias líneas rubís
: línea única (no compatible con javascript o ruby ),s
solución alternativa de javascriptS
: estudiar phpU
: php r poco codicioso- ¿Cómo convertir preg_replace e a preg_replace_callback?
- ¿Qué son los modificadores en línea?
- ¿Qué es '? -Mix' en una expresión regular de Ruby
Otro:
|
: alternancia (OR) operador ,.
: cualquier carácter ,[.]
: carácter de punto literal- ¿Qué caracteres especiales se deben escapar?
- Verbos de control ( PHP y Perl ):
(*PRUNE)
,(*SKIP)
,(*FAIL)
y(*F)
- php solamente:
(*BSR_ANYCRLF)
- php solamente:
- Recursividad ( PHP y Perl ):
(?R)
,(?0)
y(?1)
,(?-1)
,(?&groupname)
Tareas comunes
- Consigue una cuerda entre dos llaves:
{...}
- Coincidir (o reemplazar) un patrón excepto en las situaciones s1, s2, s3 ...
- ¿Cómo encuentro todos los identificadores de video de YouTube en una cadena usando una expresión regular?
- Validación:
- Internet: direcciones de correo electrónico , URL (host / puerto: alternativas regex y no regex ), contraseñas
- Numérico: un número , rangos mínimo-máximo (como 1-31) , números de teléfono , fecha
- Análisis de HTML con expresiones regulares: consulte "Información general> Cuándo no usar expresiones regulares"
Regex-Fu avanzado
- Cadenas y números:
- Expresión regular para coincidir con una línea que no contiene una palabra
- ¿Cómo detecta este patrón de PCRE los palíndromos?
- Coincidir con cadenas cuya longitud es una cuarta potencia
- ¿Cómo encuentra esta expresión regular números triangulares?
- ¿Cómo determinar si un número es primo con expresión regular?
- ¿Cómo hacer coincidir el carácter del medio en una cadena con expresiones regulares?
- Otro:
- ¿Cómo podemos hacer coincidir un ^ nb ^ n con Java regex?
- Coincidir con corchetes anidados
- Coincidencia de expresiones regulares "verticales" en una "imagen" ASCII
- Lista de preguntas de expresiones regulares altamente votadas en Code Golf
- ¿Cómo hacer que dos cuantificadores se repitan la misma cantidad de veces?
- Una expresión regular imposible de igualar:
(?!a)a
- Emparejar / eliminar / reemplazar
this
excepto en los contextos A, B y C - ¿Coincidir corchetes anidados con expresiones regulares sin usar recursividad o grupos de equilibrio?
Información específica de sabor
(A excepción de los marcados con *
, esta sección contiene enlaces que no son de Stack Overflow).
- Java
- Documentación oficial: Pattern Javadoc , tutorial de expresiones regulares de Oracle
- Las diferencias entre funciones en
java.util.regex.Matcher
:matches()
): La coincidencia debe estar anclada tanto en input-start como -endfind()
): Una coincidencia puede estar en cualquier lugar de la cadena de entrada (subcadenas)lookingAt()
: La coincidencia debe estar anclada solo al inicio de entrada- (Para anclajes en general, consulte la sección "Anclajes")
- Las únicas
java.lang.String
funciones que aceptan expresiones regulares:matches(s)
,replaceAll(s,s)
,replaceFirst(s,s)
,split(s)
,split(s,i)
- * Una discusión (obstinada y) detallada de las desventajas y características faltantes en
java.util.regex
- .RED
- Documentación oficial:
- Impulsar el motor de expresiones regulares: sintaxis general , sintaxis de Perl (utilizado por TextPad, Sublime Text, UltraEdit, ... ???)
- Información general de JavaScript 1.5 y objeto RegExp
- .NET
- PHP: sintaxis de patrones ,
preg_match
- Python: operaciones de expresiones regulares ,
search
vsmatch
, procedimientos - Splunk: terminología y sintaxis de expresiones regulares y comando de expresiones regulares
- Tcl: sintaxis de expresiones regulares , página de manual ,
regexp
comando - Buscar y reemplazar de Visual Studio
Información general
(Los enlaces marcados con *
son enlaces que no son de Stack Overflow).
- Otros recursos de documentación general: Aprendizaje de expresiones regulares , * Regular-expressions.info , * Entrada de Wikipedia , * RexEgg , Open-Directory Project
- DFA frente a NFA
- Generación de cadenas regex coincidentes
- Libros: Dominando las expresiones regulares de Jeffrey Friedl
- Cuándo no usar expresiones regulares:
- Algunas personas, cuando se enfrentan a un problema, piensan "Lo sé, usaré expresiones regulares". Ahora ellos tienen dos problemas. (publicación de blog escrita porel fundador de Stack Overflow ) *
- No use expresiones regulares para analizar HTML:
- No lo hagas .
- Bueno, tal vez ... si está realmente decidido (otras respuestas en esta pregunta también son buenas)
- No lo hagas .
Ejemplos de expresiones regulares que pueden hacer que el motor de expresiones regulares falle
Herramientas: probadores y explicadores
(Esta sección contiene enlaces que no son de Stack Overflow).
En línea (* incluye probador de reemplazo, + incluye probador dividido) :
- Debuggex (también tiene un repositorio de expresiones regulares útiles) javascript , python , pcre
- * Expresiones regulares 101 php , pcre , python , javascript
- Expresiones regulares Pal , regular-expressions.info Javascript
- Rubular rubí
- * + regexstorm.net .net
- * RegexPlanet: Java java , Go go , Haskell haskell , JavaScript javascript , .NET dotnet , Perl perl php PCRE php , Python python , Ruby ruby , XRegExp xregexp
freeformatter.com
xregexp- * + php PCRE y POSIX, javascript
regex.larsolavtorvik.com
- Refiddle javascript ruby .net
Desconectado:
- Microsoft Windows: RegexBuddy (análisis), RegexMagic (creación), Expresso (análisis, creación, gratis)