RegEx (Expresiones Regulares)
No te olvides: por defecto las expresiones regulares son
codiciosas
(greedy). Esto significa que una expresión regular devuelve la cadena de texto más larga que coincida con ella.
Las expresiones regulares son también ansiosas (eager) por devolver un resultado.
Para verificar tus regEx utiliza RegexPal
Modificadores
Modificadores | Descripción |
---|---|
i | Insensible a las mayúsculas y minúsculas W (case insensitive) |
g | Busqueda global (global match) |
m | Busqueda en multiples líneas de texto. (Multiple lines) |
s | Incluye saltos de línea. Sin él, las nuevas líneas son excluidas. |
Clases de Carácteres (Ranges)
Expression | Descripción |
---|---|
[abc] | Encuentra uno de los caracteres entre corchetes |
[^abc] | Encuentra cualquier carácter que NO esté entre corchetes |
[0-9] | Encuentra un dígito de 0 a 9 |
[^0-9] | Encuentra cualquier carácter que NO sea un dígito de 0 a 9 |
[A-Z] | Encuentra cualquier carácter de A mayuscula a Z mayuscula |
[a-z] | Encuentra cualquier carácter de a minuscula a z minuscula |
[A-z] | Encuentra cualquier carácter de A mayuscula a z minuscula |
[adgk] | Encuentra uno de los caracteres entre corchetes |
[^adgk] | Encuentra cualquier carácter que NO esté entre corchetes |
(a|b) | a o b |
(...) | Se utilizan para agrupar partes de una expresión. |
Cuantificadores
El metacarácter ? (detras de otro metacarácter) hace que una expresión regular, habitualmente codiciosa (greedy), se convierta en perezosa (lazy), y resulte en la cadena más corta posible que coincida con ella.
Greedy | Lazy | Descripcion |
---|---|---|
* | *? | 0 o más veces |
+ | +? | 1 o más veces |
? | ?? | 0 o 1 veces |
{ n } | { n }? | n veces |
{ n ,} | { n ,}? | n o más veces |
{ n , m } | { n , m }? | De n a m veces |
Anclas
Metacarácter | Descripción |
---|---|
^ | Comienzo de una línea |
$ | Final de una línea |
\A | Comienzo de una cadena de texto (string). Nunca final de línea. (Soporte: Java, .NET, Perl,PHP, Python,Ruby) |
\Z | Fin de cadena de texto (string). Nunca final de línea. (Soporte: Java, .NET, Perl,PHP, Python,Ruby) |
\b | Principio o final de palabra (Word boundary) |
\B | NO al principio o al final de una palabra |
Retroreferencias (backreference)
Para designar una retroreferencia (backreference), a veces utilizamos la barra inversa ( \ ), otras veces el dólar ( $ ), dependiendo del lenguaje que se utilice.
Descripción | ||
---|---|---|
$n | \n | n-ésimo grupo no pasivo (no-passive group) |
$2 | \2 | "xyz" en /^ (abc)(xyz) $/ |
$2 | \2 | "xyz" en /^ (abc(xyz)) $/ |
? | cambia el significado del grupo | |
: | el significado del grupo es: pasivo | |
?: | especifica un grupo pasivo (passive group / non-capturing group) |
|
$1 | \1 | "xyz" en /^ (?:abc)(xyz) $/ (porque el primer grupo es pasivo) |
POSIX
(Portable Operating System Interface)
Manera correcta de utilizarlos:[[:alpha:]]
or [^[:alpha:]]
.
Soporte:
SI: Perl, PHP, Ruby, Unix
NO: Java, JavaScript, .NET, Python
POSIX | Descripción |
---|---|
[:alpha:] | Caracteres alfabeticos [a-zA-Z] |
[:digit:] | Dígitos [0-9] |
[:alnum:] | Caracteres alfanuméricos [a-zA-Z0-9] |
[:lower:] | Letras minúsculas [a-z] |
[:upper:] | Letras mayúsculas [A-Z] |
[:word:] | Letras, números y el guion bajo [A-Za-z0-9_] |
[:punct:] | Punctuacion y símbolos. [!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~] |
[:space:] | Espacios en blanco, incluido <br /> [ \t\r\n\v\f] |
[:blank:] | Espacio y tabulador [ \t] |
[:print:] | Caracteres visibles y espacios (i.e: excepto los carácteres de control) [\x20-\x7E] |
[:graph:] | Caracteres visibles (i.e: excepto espacios, carácteres de control, etc.) [\x21-\x7E] |
[:xdigit:] | Dígitos hexadecimales [A-Fa-f0-9] |
[:ascii:] | Caracteres ASCII [\x00-\x7F] |
[:cntrl:] | Caracteres de control [\x00-\x1F\x7F] |
Metacaracteres basicos
Los metacaracteres deben ser escapados cuando se utilicen como caracteres normales.
Metacarácter | Descripción |
---|---|
. | Cualquier carácter excepto salto de linea |
* | Indica que el carácter precedente puede ocurri 0 o más veces. |
+ | Indica que el carácter precedente puede ocurri 1 o más veces. |
? | Indica que el carácter precedente puede ocurrir 0 o 1 vez. Hace que el metacaracter anterior sea perezoso (lazy). |
[ | Abre un set de caracteres |
] | Cierra un set de caracteres |
^ | Niega un set de caracteres ( como en [^0-9] ) |
- | Define un set de caracteres ( de 0 a 9: [0-9] ) |
{ | Comienza la repetición cuantificada del carácter precedente {min,max} |
} | Acaba la repetición cuantificada del carácter precedente {min,max} |
( | El comienzo de un grupo de caracteres. |
) | El fin de un grupo de caracteres. |
| | Alterna entre uno y otro carácter |
\ | El carácter de escape (Escape character) |
Characters específicos
Carácter | Descripción | Equivalente |
---|---|---|
\w | Encuentra un carácter alfanumérico, incluido el guión bajo ( _ ) | [a-z A-Z0-9_] |
\W | Encuentra cualquier carácter NO alfanumérico | [^a-z A-Z0-9_] |
\d | Encuentra un dígito | [0-9] |
\D | Encuentra cualquier carácter que NO es un dígito. | [^0-9] |
\s | Encuentra un espacio en blanco | [ \t\r\n] |
\S | Encuentra cualquier carácter que NO es un espacio en blanco. | [^ \t\r\n] |
\b | Encuentra una coincidencia al inicio o al final de una palabra. | |
\B | Encuentra una coincidencia que NO està al inicio o al final de una palabra. | |
\0 | Encuentra un carácter NUL | |
\n | Salto de línea (new line) | |
\f | Salto de página (feed) | |
\r | Retorno de carro (return) | |
\t | Tabulador | |
\v | Tabulador vertical | |
\xxx | Representa un carácter especificado por un número octal xxx | |
\xdd | Representa un carácter especificado por un número hexadecimal dd | |
\uxxxx | Representa un carácter Unicode especificado por un número hexadecimal xxxx |
Declaraciones
(Assertions)
Descripción | |
---|---|
?= | declaración positiva de búsqueda hacia delante (positive lookahead assertion) |
/(?=prematuro)pre/ encuentra pre de prematuro pero no pre de precavido |
|
/pre(?=maturo)/ encuentra pre de prematuro pero no pre de precavido |
|
?! | declaración negativa de búsqueda hacia delante (negative lookahead assertion) |
/(?!prematuro)pre/ encuentra pre pero no de prematuro |
|
/pre(?!maturo)/ encuentra pre pero no de prematuro |
|
?<= | declaración positiva de búsqueda hacia atras (positivee lookbehind assertion) Soporte: Si: .NET, Java, Perl, PHP, Python, Ruby 1.9 No:.JavaScript, Ruby 1.8, Unix |
/(?<=balon)mano/ encuentra -mano de balonmano pero no de antemano |
|
?<! | declaración negativa de búsqueda hacia atras (negative lookbehind assertion) Soporte: Si: .NET, Java, Perl, PHP, Python, Ruby 1.9 No:.JavaScript, Ruby 1.8, Unix |
/(?<!balon)mano/ encuentra -mano pero no de balonmano |
Comodines UNICODE
Soporte:
Si: Java, .NET, Perl, PHP, Ruby
No: JavaScript, Python, Unix
Descripción | |
---|---|
\X | Carácter comodin Unicode. Encuentra cualquier carácter incluso salto de linea. |
\p{xx} | Un carácter con la propiedad xx |
\P{xx} | Un carácter sin la propiedad xx |
M | \p{M} Marca (acentos, tilde...etc) |
L | \p{L} Letra (incluye las letras accentuadas, la ñ...etc) |
N | \p{N} Numero |
S | \p{S} Símbolo |
C | \p{C} Otros |
Para más Información:
Propiedades de los caracteres Unicode
RegEx útiles
Descripción | |
---|---|
(\bnegro\b)(?!.*\1) | ultima ocurencia de "negro" en un texto |
\b\w+\b(?=\.) | palabras seguidas de un punto ( . ), pero no el punto. |
^#(?:[0-9a-fA-F]{3}){1,2}$ | un color hex |