Una expresión regular es un grupo de caracteres o símbolos, los cuales son usados para buscar un patrón específico dentro de un texto.
Una expresión regular es un patrón que que se compara con una cadena de caracteres de izquierda a derecha. La palabra "expresión regular", puede también ser escrita como "Regex" o "Regexp". Las expresiones regulares se utiliza para remplazar un texto, dentro de un string (o cadena de caracteres), validar el formato, extraer un substring de un string completo basado en la coincidencia de una patrón, y muchas cosas más.
Imagina que estas escribiendo una aplicación y quieres agregar reglas para cuando el usuario elija su nombre de usuario. Nosotros vamos a querer que el nombre de usuario contenga letras, números, guión bajo, y guíon medio. También vamos a querer limitar el número de caracteres en el nombre de usuario para que no se vea feo. Para ello usamos la siguiente expresión regular para validar el nombre de usuario
De la expresión regular anterior, se puede aceptar las cadenas 'john_doe', 'jo-hn_doe' y 'john12_as'. La expresión no coincide con el nombre de usuario 'Jo', porque es una cadena de caracteres que contiene letras mayúsculas y es demasiado corta.
Una expresión regular es sólo un patrón de caracteres que utilizamos para realizar búsquedas en un texto. Por ejemplo, la expresión regular «the» significa: la letra t
seguida de la letra h
seguida de la letra e
.
"the" => The fat cat sat on the mat.
La expresión regular 123
coincide con la cadena 123
. La expresión regular se compara con una cadena de entrada al comparar cada carácter de la expresión regular con cada carácter de la cadena de entrada, uno tras otro. Las expresiones regulares son normalmente sensibles a mayúsculas y minúsculas, por lo que la expresión regular The
no coincide con la cadena the
.
"The" => The fat cat sat on the mat.
Los caracteres meta son los bloques de construcción de las expresiones regulares. Los meta caracteres no se sostienen a sí mismos, sino que se interpretan de alguna manera especial. Algunos meta caracteres tienen un significado especial y se escriben entre corchetes. Los meta caracteres son los siguientes:
Meta character | Description |
---|---|
. | Periodo. Coincide con cualquier caracter excepto un salto de línea. |
[ ] | Clase caracter. Coincide con cualquier caracter contenido entre corchetes. |
[^ ] | Clase caracter negado. Coincide con cualquier caracter que no está contenido dentro de los corchetes. |
* | Corresponde con 0 o más repeticiones del símbolo precedente. |
+ | Corresponde con 1 o más repeticiones del símbolo precedente. |
? | Hace que el símbolo precedente sea opcional. |
{n,m} | Llaves.Corresponde al menos "n" pero no más de "m" repeticiones del símbolo precedente. |
(xyz) | Grupo caracter. Hace coincidir los caracteres xyz en ese orden exacto. |
| | Alternancia. Corresponde a los caracteres anteriores o los caracteres después del símbolo. |
\ | Escapa el siguiente caracter. Esto le permite hacer coincidir los caracteres reservados [ ] ( ) { } . * + ? ^ $ \ | |
^ | Hace coincidir el principio de la entrada. |
$ | Corresponde al final de la entrada. |
Full stop .
es el ejemplo más simple del meta-caracter. El caracter meta "." coincide con cualquier carácter. No coincidirá con el retorno o nuevos caracteres de línea. Por ejemplo, la expresión regular .ar
significa: cualquier caracter, seguido de la letraa
, seguido de la letra "r".
".ar" => The car parked in the garage.
Los conjuntos de caracteres también se llaman clase de caracteres. Los corchetes se utilizan para especificar conjuntos de caracteres. Utilice un guión dentro de un conjunto de caracteres para especificar el rango de los caracteres. El orden del rango de caracteres dentro de corchetes no importa. Por ejemplo, la expresión regular "[Tt] he" significa: una letra mayúscula "T" o <minúscula> t, seguida de la letra "h" seguida de la letra "e"
"[Tt]he" => The car parked in the garage.
Sin embargo, un período dentro de un conjunto de caracteres significa un período literal. La expresión regular ar [.]
Significa: un carácter minúsculo a
, seguido de la letra r
, seguido de un carácter .
.
"ar[.]" => A garage is a good place to park a car.
En general, el símbolo de intercalación representa el comienzo de la cadena, pero cuando se escribe después del corchete de apertura niega el conjunto de caracteres. Por ejemplo, la expresión regular [^c] ar
significa: cualquier carácter, excepto c
, seguido del carácter a
, seguido de la letra r
.
"[^c]ar" => The car parked in the garage.
Siguiendo los caracteres meta +, * o ?, se utilizan para especificar cuántas veces puede producirse un subpatrón. Estos meta-caracteres actúan de manera diferente en diferentes situaciones.
El símbolo *
coincide con cero o más repeticiones del marcador anterior. La expresión regular a*
significa: cero o más repeticiones del carácter en minúscula precedente a
. Pero si aparece después de un conjunto de caracteres o una clase, entonces encuentra las repeticiones de todo el conjunto de caracteres. Por ejemplo, la expresión regular [a-z]*
significa: cualquier número de letras minúsculas en una fila.
"[a-z]*" => The car parked in the garage #21.
El símbolo *
se puede utilizar con el meta-caracter .
para que coincida con cualquier cadena de caracteres .*
. El símbolo *
se lo puede utilizar con el caracter de espacio en blanco \s
para que coincida con una cadena de caracteres de espacio en blanco. Por ejemplo, la expresión "\scat\s" significa: cero o más espacios, seguido por el carácter en minúscula c
, seguido del carácter en minúscula a
, seguido del carácter en minúscula t
, seguido de cero o más espacios.
"\s*cat\s*" => The fat cat sat on the concatenation.
El símbolo +
coincide con una o más repeticiones del carácter anterior. Por ejemplo, la expresión regular c.+T
significa: letra en minúscula c
, seguida por al menos uno del mismo carácter, luego el carácter en minúscula t
.
"c.+t" => The fat cat sat on the mat.
En expresiones regulares el meta-caracter ?
hace que el caracter precedente sea opcional. Este símnbolo coincide con cero o una instancia del caracter precedente. Por ejemplo, la expresión regular [T]?he
significa: El caracteropcional predecesor T
seguido por la letra en minúscula h
, seguido del caracter en minúscula e
.
"[T]he" => The car is parked in the garage.
"[T]?he" => The car is parked in the garage.
En la expresión regular, las llaves que también se denominan cuantificadores se utilizan para especificar el número de veces que se puede repetir un carácter o un grupo de caracteres. Por ejemplo, la expresión regular [0-9]{2,3}
significa: Combina al menos 2 dígitos pero no más de 3 (caracteres del rango de 0 a 9).
"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
Podemos dejar fuera el segundo número. Por ejemplo, la expresión regular [0-9] {2,}
significa: Combina 2 o más dígitos. Si también eliminamos la coma, la expresión regular [0-9]{3}
significa: coincidir exactamente con 3 dígitos.
"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
Grupo de caracteres es un grupo de sub-patrones que se escribe dentro de paréntesis (...)
. Como hemos discutido antes en la expresión regular si ponemos un cuantificador después de un caracter, repetiremos el caracter anterior. Pero si ponemos cuantificador después de un grupo de caracteres, entonces repetimos todo el grupo de caracteres. Por ejemplo, la expresión regular (ab)*
coincide con cero o más repeticiones del caracter "ab". También podemos usar el caracter de alternancia |
meta dentro del grupo de caracteres. Por ejemplo, la expresión regular (c|g|p)ar
significa: caracter en minúscula c
, g
o p
, seguido del caracter a
, seguido del caracter r
.
"(c|g|p)ar" => The car is parked in the garage.
En la expresión regular se usa la barra vertical |
para definir la alternancia. La alternancia es como una condición entre múltiples expresiones. Ahora, puedes estar pensando que el conjunto de caracteres y la alternancia funciona de la misma manera. Pero la gran diferencia entre el conjunto de caracteres y la alternancia es que el conjunto de caracteres funciona a nivel de caracter pero la alternancia funciona a nivel de expresión. Por ejemplo, la expresión regular (T|t)he|car
significa: el carcter en mayúscula T
o en minúscula t
, seguido del caracter en minúscula h
, seguido del caracter en minúscula e
o del caracter en minúscula c
, seguido de un caracter en minúscula a
, seguido del carácter en minúscula r
.
"(T|t)he|car" => The car is parked in the garage.
La barra invertida \
se utiliza en la expresión regular para escapar del carácter siguiente. Esto permite especificar un símbolo como un caracter coincidente incluyendo caracteres reservados {}[]/\+*.^|?
. Por ejemplo, la expresión regular .
se utiliza para coincidir con cualquier caracter, excepto la nueva línea. Ahora, para emparejar .
en una cadena de entrada, la expresión regular (f|c|m)at\.?
significa: la letra minúscula f
, c
o m
, seguida del caracter en minúscula a
, seguido de la letra minúscula t
, seguida del caracter opcional .
.
"(f|c|m)at\.?" => The fat cat sat on the mat.
En expresiones regulares, usamos anclas para comprobar si el símbolo de coincidencia es el símbolo inicial o el símbolo final de la cadena de entrada. Los anclajes son de dos tipos: El primer tipo es el símbolo ^
que comprueba si el caracter coincidente es el caracter inicial de la entrada y el segundo tipo es Dollar $
que comprueba si el caracter coincidente es el último caracter de la cadena de entrada.
El símbolo de intercalación ^
se usa para verificar si el caracter coincidente es el primer caracter de la cadena de entrada. Si aplicamos la siguiente expresión regular ^a
(si a es el símbolo inicial) a la cadena de entrada abc
coincide con a
. Pero si aplicamos la expresión regular ^b
en la cadena de entrada anterior, no coincide con nada. Porque en la cadena de entrada abc
"b" no es el símbolo inicial. Vamos a echar un vistazo a otra expresión regular ^(T|t)he
, significa: mayúsculas T
o la letra minúscula t
es el símbolo inicial de la cadena de entrada, seguido del caracter minúscula h
y seguido del caracter en minúscula e
.
"(T|t)he" => The car is parked in the garage.
"^(T|t)he" => The car is parked in the garage.
El símbolo de dólar $
se utiliza para comprobar si el caracter coincidente es el último carácter de la cadena de entrada. Por ejemplo, la expresión regular (at\.)$
significa: un caracter en minúscula a
, seguido del caracter en minúscula t
seguido de un carácter .
y el marcador debe ser el final de la cadena.
"(at\.)" => The fat cat. sat. on the mat.
"(at\.)$" => The fat cat. sat. on the mat.
La expresión regular proporciona abreviaturas para los conjuntos de caracteres comúnmente utilizados, que ofrecen abreviaturas convenientes para expresiones regulares de uso común. Los conjuntos de caracteres abreviados son los siguientes:
Shorthand | Description |
---|---|
. | Cualquier caracter excepto la nueva línea |
\w | Coincide con los caracteres alfanuméricos: [a-zA-Z0-9_] |
\W | Coincide con los caracteres no alfanuméricos: [^\w] |
\d | Coincide con dígitos: [0-9] |
\D | Coincide con no dígitos: [^\d] |
\s | Coincide con caracteres espaciales: [\t\n\f\r\p{Z}] |
\S | Coincide con caracteres no espaciales: [^\s] |
Mirar hacia delante (lookaheds) y mirar hacia atrás (Lookbehind) a veces conocidos
como lookaround son tipo específico de grupo que no captura (Utilice para
coincidir con el patrón pero no se incluye en la lista correspondiente). Los
lookaheads se usan cuando tenemos la condición de que este patrón es precedido o
seguido por otro patrón determinado. Por ejemplo, queremos obtener todos los números
que están precedidos por el carácter $
de la siguiente cadena de entrada
$4.44 y $10.88
. Usaremos la siguiente expresión regular (?<=\$)[0-9\.] *
,
esto significa: obtener todos los números que contienen el carácter .
y
están precedidos del carácter $
. A continuación se muestran los lookarounds
que se utilizan en expresiones regulares:
Symbol | Description |
---|---|
?= | Positive Lookahead |
?! | Negative Lookahead |
?<= | Positive Lookbehind |
?<! | Negative Lookbehind |
El lookahead positivo afirma que la primera parte de la expresión debe ser
seguida por la expresión lookahead. El matchonly devuelto contiene el texto que
coincide con la primera parte de la expresión. Para definir un lookahead positivo,
se utilizan paréntesis. Dentro de esos paréntesis, un signo de interrogación con
signo igual se utiliza de esta manera: (?= ...)
. La expresión de Lookahead se
escribe después del signo igual dentro de los paréntesis. Por ejemplo, la
expresión regular [T|t]he (?=\Sfat) significa: opcionalmente emparejar la letra minúscula
to la letra mayúscula
T, seguida de la letra
h, seguida de la letra
e. Entre paréntesis definimos lookahead positivo que indica al motor de expresión regular que coincida con
The o
theseguido de la palabra
fat`.
"[T|t]he(?=\sfat)" => The fat cat sat on the mat.
El lookahead negativo se usa cuando necesitamos obtener todas las coincidencias
de la cadena de entrada que no son seguidas por un patrón. El aspecto negativo se
define de la misma manera que definimos el aspecto positivo, pero la única diferencia
es que en lugar del caracter igual =
utilizamos la negción !
, es decir,
(?! ...)
. Vamos a echar un vistazo a la siguiente expresión regular [T|t]he(?!\Sfat)
que significa: obtener todas las The
o the
seguidos por la palabra fat
precedido por un carácter de espacio.
"[T|t]he(?!\sfat)" => The fat cat sat on the mat.
Positivo lookbehind se utiliza para obtener todos los caracteres que están precedidos
por un patrón específico. La apariencia positiva se denomina (?<=...)
.
Por ejemplo, la expresión regular (? <= [T|t]he\s)(fat|mat)
significa: obtener todas las palabras
fat
o mat
de la cadena de entrada después de la palabra The
o the
.
"(?<=[T|t]he\s)(fat|mat)" => The fat cat sat on the mat.
El lookbehind negativo se utiliza para obtener todas las coincidencias que no
están precedidas por un patrón específico. El lookbehind negativo se denota por
(? <! ...)
. Por ejemplo, la expresión regular (?<!(T|t)he(s)(cat)
significa:
obtener todas las palabras cat
de la cadena de entrada que no están después de
la palabra The
o the
.
"(?<![T|t]he\s)(cat)" => The cat sat on cat.
Los indicadores también se llaman modificadores porque modifican la salida de una expresión regular. Estos indicadores se pueden utilizar en cualquier orden o combinación, y son una parte integral de RegExp.
Bandera | Descripción |
---|---|
i | Insensible a mayúsculas y minúsculas: ajusta la coincidencia para que no distinga mayúsculas y minúsculas. |
g | Búsqueda global: busque un patrón en toda la cadena de entrada. |
m | Multilinea: Ancla meta caracter trabaja en cada linea. |
El modificador i
se utiliza para realizar la coincidencia entre mayúsculas y
minúsculas. Por ejemplo, la expresión regular /The/gi
significa: letra mayúscula
T
, seguido del caracter en minúscula h
, seguido del carácter e
. Y al final
de la expresión regular, el indicador i
indica al motor de expresiones
regulares que ignore el caso. Como puede ver, también ofrecemos el indicador
g
porque queremos buscar el patrón en toda la cadena de entrada.
"The" => The fat cat sat on the mat.
"/The/gi" => The fat cat sat on the mat.
El modificador g
se utiliza para realizar una coincidencia global
(encontrar todos las coincidencias en lugar de detenerse después de la primera coincidencia).
Por ejemplo, la expresión regular /.(At)/g
significa: cualquier carácter,
excepto la nueva línea, seguido del caracter minúsculo a
, seguido del caracter
en minúscula t
. Debido a que siempre g
prevee la bandera al final de la expresión
regular ahora encontrará todas las coincidencias de toda la cadena de entrada.
"/.(at)/" => The fat cat sat on the mat.
"/.(at)/g" => The fat cat sat on the mat.
El modificador m
se utiliza para realizar una coincidencia de varias líneas.
Como analizamos anteriormente, las anclas (^,$)
se utilizan para comprobar si
el patrón es el comienzo de la entrada o el final de la cadena de entrada. Pero
si queremos que las anclas funcionen en cada línea usamos la bandera m
.
Por ejemplo, la expresión regular /at(.)?$/Gm
significa: caracter en minúscula a
, seguido del caracter minúsculo t
,
opcionalmente cualquier cosa menos la nueva línea. Y debido a m
bandera ahora
el motor de expresión regular coincide con el patrón al final de cada línea de una cadena.
"/.at(.)?$/" => The fat cat sat on the mat.
"/.at(.)?$/gm" => The fat cat sat on the mat.
- Report issues
- Open pull request with improvements
- Spread the word
- Reach out to me directly at [email protected] or
MIT © Zeeshan Ahmed