Buscar..


Introducción

Los patrones de expresión regular a menudo se usan con modificadores (también llamados indicadores ) que redefinen el comportamiento de expresiones regulares. Los modificadores Regex pueden ser regulares (por ejemplo, /abc/i ) y en línea (o incrustados ) (por ejemplo, (?i)abc ). Los modificadores más comunes son los modificadores globales, que no distinguen entre mayúsculas y minúsculas, multilínea y dotall. Sin embargo, los tipos de expresión regular difieren en el número de modificadores de expresión regular admitidos y sus tipos.

Observaciones

Modificadores PCRE

Modificador En línea Descripción
PCRE_CASELESS (?yo) Coincidencia insensible al caso
PCRE_MULTILINE (?metro) Coincidencia de líneas múltiples
PCRE_DOTALL (? s) . une nuevas lineas
PCRE_ANCHORED (?UNA) Meta-carácter ^ coincide solo al inicio
PCRE_EXTENDED (?X) Los espacios en blanco son ignorados
PCRE_DOLLAR_ENDONLY n / A Meta-carácter $ coincide solo al final
PCRE_EXTRA (?X) Estricto escape de análisis
PCRE_UTF8 Maneja caracteres UTF-8
PCRE_UTF16 Maneja caracteres UTF-16
PCRE_UTF32 Maneja caracteres UTF-32
PCRE_UNGREEDY (? U) Configura el motor para una coincidencia perezosa.
PCRE_NO_AUTO_CAPTURE (? :) Desactiva los grupos de auto captura

Modificadores de Java

Modificador ( Pattern.### ) Valor Descripción
UNIX_LINES 1 Habilita el modo de líneas Unix .
CASE_INSENSITIVE 2 Permite la coincidencia entre mayúsculas y minúsculas.
COMENTARIOS 4 Permite espacios en blanco y comentarios en un patrón.
MULTILINE 8 Habilita el modo multilínea.
LITERAL dieciséis Habilita el análisis literal del patrón.
DOTALL 32 Habilita el modo dotall.
UNICODE_CASE 64 Habilita el plegado de casos conscientes de Unicode.
CANON_EQ 128 Habilita la equivalencia canónica.
UNICODE_CHARACTER_CLASS 256 Habilita la versión Unicode de clases de caracteres predefinidas y clases de caracteres POSIX.

Modificador DOTALL

Un patrón de expresiones regulares donde un modificador DOTALL (en la mayoría de los sabores de expresiones regulares expresado con s ) cambia el comportamiento de . habilitándolo para que coincida con un símbolo de nueva línea (LF):

/cat (.*?) dog/s

Esta expresión regular al estilo de Perl coincidirá con una cadena como "cat fled from\na dog" capturando "fled from\na" al Grupo 1.

Una versión en línea: (?s) (por ejemplo, (?s)cat (.*?) dog )

Nota : En Ruby, el equivalente del modificador DOTALL es m , Regexp::MULTILINE modificador Regexp::MULTILINE (por ejemplo, /a.*b/m ).

Nota : JavaScript no proporciona un modificador DOTALL, por lo que a . nunca se puede permitir que coincida con un carácter de nueva línea. Para lograr el mismo efecto, una solución es necesaria, por ejemplo, sustituyendo todos los . s con una clase de caracteres comodín como [\S\s] , o una clase de carácter no nada [^] (sin embargo, esta construcción será tratada como un error por todos los otros motores, y por lo tanto no es portátil).

Modificador MULTILINE

Otro ejemplo es un modificador MULTILINE (generalmente expresado con el indicador m (no en Oniguruma (por ejemplo, Ruby) que usa m para indicar un modificador DOTALL)) que hace que los anclajes de ^ y $ coincidan con el inicio / final de una línea , no el inicio / final de toda la cadena.

/^My Line \d+$/gm

encontrará todas las líneas que comienzan con My Line , luego contendrá un espacio y 1+ dígitos hasta el final de la línea.

Una versión en línea: (?m) (por ejemplo, (?m)^My Line \d+$ )

NOTA : En Oniguruma (por ejemplo, en Ruby), y también en casi todos los editores de texto que admiten expresiones regulares, los anclajes ^ y $ indican las posiciones de inicio / final de línea de forma predeterminada . Debe usar \A para definir todo el comienzo de cadena / documento y \z para denotar el final de cadena / documento. La diferencia entre \Z y \z es que la primera puede coincidir antes del símbolo de nueva línea final (LF) al final de la cadena (por ejemplo, /\Astring\Z/ encontrará una coincidencia en "string\n" ) (excepto Python, donde el comportamiento de \Z es igual a \z no se admite el anclaje \z ).

Modificador IGNORE CASE

El modificador común para ignorar el caso es i :

/fog/i

coincidirá con Fog , foG , etc.

La versión en línea del modificador se parece a (?i) .

Notas:

En Java, de forma predeterminada, la coincidencia que no distingue entre mayúsculas y minúsculas asume que solo se comparan los caracteres en el conjunto de caracteres US-ASCII. La coincidencia no sensible a mayúsculas y minúsculas se puede habilitar especificando el indicador UNICODE_CASE junto con este CASE_INSENSITIVE ( CASE_INSENSITIVE ) . (por ejemplo, Pattern p = Pattern.compile("YOUR_REGEX", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); ). Se puede encontrar algo más sobre esto en Coincidencia insensible a mayúsculas y minúsculas en RegEx de Java . Además, UNICODE_CHARACTER_CLASS se puede usar para hacer que Unicode concuerde.

VERBOSE / COMMENT / IgnorePatternWhitespace modifier

El modificador que permite usar espacios en blanco dentro de algunas partes del patrón para formatearlo para una mejor legibilidad y para permitir comentarios que comiencen con # :

/(?x)^          # start of string
  (?=\D*\d)     # the string should contain at least 1 digit 
  (?!\d+$)      # the string cannot consist of digits only
  \#            # the string starts with a hash symbol
  [a-zA-Z0-9]+ # the string should have 1 or more alphanumeric symbols
  $             # end of string
/

Ejemplo de una cadena: #word1here . Tenga en cuenta que el símbolo # se escapa para denotar un # literal que forma parte de un patrón.

El espacio en blanco que no se ha escapado en el patrón de expresión regular se ignora, escápelo para que forme parte del patrón.

Generalmente, el espacio en blanco dentro de las clases de caracteres ( [...] ) se trata como un espacio en blanco literal, excepto en Java.

Además, vale la pena mencionar que en PCRE, .NET, Python, Ruby Oniguruma, ICU, Boost regex, los sabores se pueden usar (?#:...) dentro del patrón regex.

Modificador explícito de captura

Este es un modificador específico de expresiones regulares de .NET expresado con n . Cuando se utilizan, los grupos sin nombre (como (\d+) ) no se capturan. Solo las capturas válidas son grupos con nombres explícitos (por ejemplo, (?<name> subexpression) ).

(?n)(\d+)-(\w+)-(?<id>\w+)

coincidirá con todo 123-1_abc-00098 , pero (\d+) y (\w+) no crearán grupos en el objeto coincidente resultante. El único grupo será ${id} . Ver demo .

Modificador UNICODE

El modificador UNICODE, generalmente expresado como u (PHP, Python) o U (Java), hace que el motor de expresiones regulares trate el patrón y la cadena de entrada como cadenas y patrones de Unicode, hace que las clases abreviadas del patrón como \w , \d , \s , etc. Unicode-conscientes.

/\A\p{L}+\z/u

es una expresión regular de PHP para hacer coincidir cadenas que constan de 1 o más letras Unicode. Ver la demo regex .

Tenga en cuenta que en PHP , el modificador /u permite al motor PCRE manejar cadenas como UTF8 (activando el verbo PCRE_UTF8 ) y hacer que las clases de caracteres abreviadas en el patrón Unicode sean conscientes (al habilitar el verbo PCRE_UCP , consulte más en pcre.org ) .

Los patrones y las cadenas de sujetos se tratan como UTF-8. Este modificador está disponible desde PHP 4.1.0 o superior en Unix y desde PHP 4.2.3 en win32. La validez UTF-8 del patrón y del sujeto se verifica desde PHP 4.3.5. Un sujeto no válido hará que la función preg_ * no coincida con nada; un patrón no válido activará un error de nivel E_WARNING. Las secuencias de UTF-8 de cinco y seis octetos se consideran inválidas desde PHP 5.3.4 (resp. PCRE 7.3 2007-08-28); anteriormente aquellos han sido considerados como válidos UTF-8.

En Python 2.x, re.UNICODE solo afecta al patrón: Make \w , \W , \b , \B , \d , \D , \s y \S dependientes de la base de datos de propiedades de caracteres Unicode.

Una versión en línea: (?u) en Python, (?U) en Java. Por ejemplo:

print(re.findall(ur"(?u)\w+", u"Dąb")) # [u'D\u0105b']
print(re.findall(r"\w+", u"Dąb"))      # [u'D', u'b']

System.out.println("Dąb".matches("(?U)\\w+")); // true
System.out.println("Dąb".matches("\\w+"));     // false

PCRE_DOLLAR_ENDONLY modificador

El modificador PCRE_DOLLAR_ENDONLY compatible con PCRE que hace que el ancla $ coincida al final de la cadena (excluyendo la posición antes de la nueva línea final en la cadena).

/^\d+$/D

es igual a

/^\d+\z/

y coincide con una cadena completa que consta de 1 o más dígitos y no coincidirá con "123\n" , pero coincidirá con "123" .

Modificador PCRE_ANCHORED

Otro modificador compatible con PCRE expresado con /A modificador. Si se establece este modificador, el patrón se obliga a "anclarse", es decir, se limita a coincidir solo al comienzo de la cadena que se está buscando (la "cadena de asunto"). Este efecto también puede lograrse mediante construcciones apropiadas en el propio patrón, que es la única forma de hacerlo en Perl.

/man/A

es lo mismo que

/^man/

Modificador PCRE_UNGREEDY

El indicador PCRE_UNGREEDY compatible con PCRE expresado con /U Cambia la codicia dentro de un patrón: /a.*?b/U = /a.*b/ y viceversa.

Modificador PCRE_INFO_JCHANGED

Un modificador PCRE más que permite el uso de grupos nombrados duplicados.

NOTA : solo se admite la versión en línea - (?J) , y se debe colocar al inicio del patrón.

Si utiliza

/(?J)\w+-(?:new-(?<val>\w+)|\d+-empty-(?<val>[^-]+)-collection)/

los valores de grupo "val" nunca estarán vacíos (siempre se establecerán). Sin embargo, se puede lograr un efecto similar con el reinicio de rama.

Modificador PCRE_EXTRA

Un modificador de PCRE que causa un error si una barra invertida en un patrón es seguida por una letra que no tiene un significado especial. De forma predeterminada, una barra invertida seguida de una letra sin un significado especial se trata como un literal.

P.ej

/big\y/

coincidirá bigy , pero

/big\y/X

lanzará una excepción.

Versión en línea: (?X)



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow