Regular Expressions
Clases de personajes
Buscar..
Observaciones
Clases simples
Regex | Partidos |
---|---|
[abc] | Cualquiera de los siguientes caracteres: a , b , o c |
[az] | Cualquier personaje de a de z , incluido (esto se llama un rango) |
[0-9] | Cualquier dígito de 0 a 9 , inclusive |
Clases comunes
Algunos grupos / rangos de caracteres se usan tan a menudo, tienen abreviaturas especiales:
Regex | Partidos |
---|---|
\w | Caracteres alfanuméricos más el subrayado (también conocidos como "caracteres de palabras") |
\W | Caracteres sin palabras (igual que [^\w] ) |
\d | Dígitos ( más anchos que [0-9] ya que incluyen dígitos persas, indios, etc.) |
\D | Sin dígitos ( más corto que [^0-9] desde que rechazó los dígitos persas, los indios, etc.) |
\s | Caracteres de espacios en blanco (espacios, tabulaciones, etc.) Nota : puede variar dependiendo de su motor / contexto |
\S | Caracteres no en blanco |
Clases de negacion
Una careta (^) después del corchete de apertura funciona como una negación de los personajes que lo siguen. Esto coincidirá con todos los caracteres que no están en la clase de caracteres.
Las clases de caracteres negados también coinciden con los caracteres de salto de línea, por lo tanto, si estos no deben coincidir, los caracteres de salto de línea específicos deben agregarse a la clase (\ r y / o \ n).
Regex | Partidos |
---|---|
[^AB] | Cualquier personaje que no sea A y B |
[^\d] | Cualquier carácter, excepto los dígitos. |
Los basicos
Supongamos que tenemos una lista de equipos, llamada así: Team A
, Team B
, ..., Team Z
Entonces:
-
Team [AB]
: Esto coincidirá con elTeam A
o elTeam B
-
Team [^AB]
: Esto coincidirá con cualquier equipo, excepto elTeam A
o elTeam B
A menudo necesitamos hacer coincidir los caracteres que "pertenecen" en algún contexto u otro (como las letras de la A
a la Z
), y para eso son las clases de caracteres.
Unir diferentes palabras similares
Considere la clase de caracteres [aeiou]
. Esta clase de caracteres se puede usar en una expresión regular para hacer coincidir un conjunto de palabras escritas de manera similar.
b[aeiou]t
coincide:
- murciélago
- apuesta
- poco
- larva del moscardón
- pero
No concuerda:
- combate
- btt
- bt
Las clases de personajes en su propia coinciden con un solo personaje a la vez.
Coincidencia no alfanumérica (clase de caracteres negados)
[^0-9a-zA-Z]
Esto coincidirá con todos los caracteres que no sean ni números ni letras (caracteres alfanuméricos). Si el carácter de subrayado _
también se va a negar, la expresión se puede acortar a:
[^\w]
O:
\W
En las siguientes oraciones:
¿Hola que tal?
No puedo esperar para el 2017 !!!
Los siguientes caracteres coinciden:
,
,,
'
,?
y el final del carácter de línea.
'
,,
!
y el final del carácter de línea.
NOTA UNICODE
Tenga en cuenta que algunos tipos con compatibilidad de propiedades de caracteres Unicode pueden interpretar \w
y \W
como [\p{L}\p{N}_]
y [^\p{L}\p{N}_]
que significa otras letras Unicode y también se incluirán caracteres numéricos (ver documentos PCRE ). Aquí hay una prueba de PCRE \w
:
En .NET, \w
= [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}]
, y tenga en cuenta que no coincide con \p{Nl}
y \p{No}
diferencia de PCRE (consulte la documentación de \w
.NET ):
Tenga en cuenta que, por alguna razón, Unicode 3.1 letras minúsculas (como 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚
) no coinciden.
Java (?U)\w
coincidirá con una combinación de lo que \w
coincide en PCRE y .NET:
Coincidencia sin dígitos (clase de caracteres negados)
[^0-9]
Esto coincidirá con todos los caracteres que no sean dígitos ASCII.
Si también se van a negar los dígitos de Unicode, se puede usar la siguiente expresión, dependiendo de su configuración de sabor / idioma:
[^\d]
Esto se puede reducir a:
\D
Es posible que deba habilitar el soporte de propiedades de caracteres Unicode explícitamente mediante el uso del modificador u
o mediante programación en algunos idiomas, pero esto puede no ser obvio. Para transmitir la intención explícitamente, se puede usar la siguiente construcción (cuando hay soporte disponible):
\P{N}
Lo que por definición significa: cualquier carácter que no sea un carácter numérico en ningún script. En un rango de caracteres negados, puedes usar:
[^\p{N}]
En las siguientes oraciones:
¿Hola que tal?
No puedo esperar para el 2017 !!!
Los siguientes personajes serán emparejados:
,
,,
'
,?
, el carácter de fin de línea y todas las letras (minúsculas y mayúsculas).
'
,,
!
, el carácter de fin de línea y todas las letras (minúsculas y mayúsculas).
Clase de personajes y problemas comunes que enfrentan los principiantes.
1. Clase de personaje
La clase de personaje se denota por []
. El contenido dentro de una clase de caracteres se trata como un single character separately
. por ejemplo, supongamos que usamos
[12345]
En el ejemplo anterior, significa coincidencia 1 or 2 or 3 or 4 or 5
. En palabras simples, puede entenderse como or condition for single characters
( énfasis en un solo carácter )
1.1 Palabra de precaución
- En la clase de caracteres, no hay concepto de hacer coincidir una cadena. Por lo tanto, si está utilizando regex
[cat]
, no significa que deba coincidir con la palabracat
literalmente, sino que debe coincidir conc
oa
ot
. Este es un malentendido muy común que existe entre las personas que son más nuevas que las expresiones regulares. - A veces la gente usa
|
(alternancia) dentro de la clase de personaje pensando que actuará comoOR condition
que es incorrecta. por ejemplo, utilizando[a|b]
significa en realidad partidoa
o|
(literalmente) ob
.
2. Rango en la clase de personaje
El rango en la clase de caracteres se denota usando -
signo. Supongamos que queremos encontrar cualquier carácter dentro de los alfabetos en inglés de la A
a la Z
Esto se puede hacer usando la siguiente clase de caracteres
[A-Z]
Esto se podría hacer para cualquier rango ASCII o Unicode válido. Los rangos más utilizados incluyen [AZ]
, [az]
o [0-9]
. Además, estos rangos se pueden combinar en la clase de caracteres como
[A-Za-z0-9]
Esto significa que coinciden con cualquier carácter en el rango A to Z
o a to z
o 0 to 9
. El pedido puede ser cualquier cosa. Por lo tanto, lo anterior es equivalente a [a-zA-Z0-9]
siempre que el rango que defina sea correcto.
2.1 Palabra de precaución
A veces, al escribir rangos para la
A
a laZ
gente lo escribe como[Az]
. Esto es incorrecto en la mayoría de los casos porque estamos usandoz
lugar deZ
Por lo tanto, esto denota una coincidencia con cualquier carácter del rango ASCII65
(de A) al122
(de z), que incluye muchos caracteres no deseados después del rango ASCII90
(de Z). SIN EMBARGO ,[Az]
se puede usar para hacer coincidir todas las letras[a-zA-Z]
en expresiones regulares de estilo POSIX cuando se establece la intercalación para un idioma en particular.[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
en Cygwin conLC_COLLATE="en_US.UTF-8"
produceABCEDF
. Si estableceLC_COLLATE
enC
(en Cygwin, hecho con laexport
), le dará elABCEDEF[]_abcdef
esperadoABCEDEF[]_abcdef
.Significado de
-
dentro de la clase de carácter es especial. Denota el rango como se explicó anteriormente. ¿Y si queremos emparejar-
personaje literalmente? No podemos ponerlo en ninguna parte, de lo contrario, denotará rangos si se coloca entre dos caracteres. En ese caso, tenemos que poner-
en el inicio de la clase de caracteres como[-AZ]
o en el final de la clase de caracteres como[AZ-]
oescape it
si quieres usarlo en el medio como[AZ\-az]
.
3. Clase de personaje negado
La clase de caracteres negados se denota por [^..]
. El signo de careta ^
denota coincidir con cualquier carácter excepto el presente en la clase de carácter. p.ej
[^cat]
significa emparejar cualquier carácter excepto c
o a
o t
.
3.1 Palabra de precaución
- El significado de caret sign
^
asigna a la negación solo si está en el inicio de la clase de carácter. Si se encuentra en cualquier otro lugar de la clase de caracteres, se trata como un carácter de intercalación literal sin ningún significado especial. - Algunas personas escriben expresiones regulares como
[^]
. En la mayoría de los motores regex, esto da un error. La razón es que cuando está usando^
en la posición inicial, se espera que al menos un carácter deba ser negado. Sin embargo, en JavaScript , esta es una construcción válida que coincide con cualquier cosa pero nada , es decir, coincide con cualquier símbolo posible (pero con signos diacríticos, al menos en ES5).
Clases de personajes POSIX
Las clases de caracteres POSIX son secuencias predefinidas para un determinado conjunto de caracteres.
Clase de personaje | Descripción |
---|---|
[:alpha:] | Caracteres alfabéticos |
[:alnum:] | Caracteres alfabéticos y dígitos |
[:digit:] | Dígitos |
[:xdigit:] | Dígitos hexadecimales |
[:blank:] | Espacio y tab |
[:cntrl:] | Personajes de control |
[:graph:] | Caracteres visibles (cualquier cosa excepto espacios y caracteres de control) |
[:print:] | Caracteres y espacios visibles. |
[:lower:] | Letras minusculas |
[:upper:] | Letras mayúsculas |
[:punct:] | Puntuación y símbolos. |
[:space:] | Todos los caracteres de espacio en blanco, incluidos los saltos de línea |
Las clases de caracteres adicionales pueden estar disponibles según la implementación y / o la configuración regional.
Clase de personaje | Descripción |
---|---|
[:<:] | Principio de palabra |
[:>:] | Fin de la palabra |
[:ascii:] | Personajes ASCII |
[:word:] | Letras, dígitos y guiones bajos. Equivalente a \w |
Para utilizar el interior de una secuencia de corchetes (también conocida como clase de caracteres), también debe incluir los corchetes. Ejemplo:
[[:alpha:]]
Esto coincidirá con un carácter alfabético.
[[:digit:]-]{2}
Esto coincidirá con 2 caracteres, que son dígitos o -
. Lo siguiente coincidirá:
-
--
-
11
-
-2
-
3-
Más información está disponible en: Regular-expressions.info