Expresiones regulares
Posted by The EditorLas expresiones regulares son una forma de describir patrones para la búsqueda de cadenas (dentro de otras o dentro de un archivo ASCII) y se crean combinando caracteres normales con caracteres especiales (wildcards). Es una forma de trabajar con cadenas muy utilizada en prácticamente todos los lenguajes de programación (como Perl, PHP o JavaScript), en muchos comandos del shell (como grep, sed y awk) así como en archivos de configuración (como Apache o Lighttpd). En general, son bastante complicadas por lo poco descriptivas que son en sí mismas.
En una expresióon regular podemos encontrar tres tipos de caracteres:
- caracteres normales: su significado es el habitual. Por ejemplo:
"b" significa "la letra b"
- caracteres especiales: tienen un significado especial. Por ejemplo:
"$" significa "final de línea"
Si queremos incluir en el patrón de búsqueda algún carácter especial debemos decirle al sistema que lo trate como un literal: le añadiremos "\" delante y diremos que lo hemos "escapado". Por ejemplo:
para buscar "\" hay que escaparlo, quedando "\\"
Los caracteres especiales son los siguientes:
\ [ ] { } ( ) * $ ? | + - . , ˆ - caracteres normales escapados: algunos caracteres normales adquieren un significado especial
al ser escapados con el carácter "\". Por ejemplo:
"\b" significa "principio o final de una palabra".
| Expresiones regulares | |||
| Patrón | Significado | exp_reg | match |
| Cadenas | |||
| . | cualquier carácter excepto EOL ("nueva línea") | "." | cualquier carácter excepto EOL |
| \ | carácter especial | "\*" "\\" |
"*" "\" |
| x | un carácter | "a" "A" "2" |
"a" "A" "2" |
| xyz | varios caracteres | "hola" | "hola" |
| x|y | un carácter u otro | "a|b" | "a" o "b" |
| [xyz] | un carácter que esté en una lista | "[aeiou]" | una vocal |
| [a-z] | un carácter que pertenezca a un rango | "[a-z]" "[a-zA-Z]" "[a-z][A-Z]" |
una minúscula una letra una minúscula seguida de una mayúscula |
| [ˆx] | cualquier carácter excepto "x" | "[ˆa]" | cualquier carácter excepto "a" |
| [ˆxyz] | un carácter que no esté en una lista | "[ˆaeiou]" | una consonante |
| [ˆa-z] | un carácter que no pertenezca a un rango | "[ˆa-z]" | una mayúscula |
| \w | cualquier carácter alfanumérico incluyendo el guión bajo | equivale a [a-zA-Z0-9_] | |
| \W | cualquier carácter no alfanumérico | equivale a [ˆa-zA-Z0-9_] | |
| \d | cualquier dígito | equivale a [0-9] | |
| \D | cualquier carácter no dígito | equivale a [ˆ0-9] | |
| \t | tabulador | ||
| \r | retorno de carro | ||
| \n | final de línea | ||
| \s | cualquier carácter no visible, como tabulador, retorno o espacio | ||
| \S | cualquier carácter visible | ||
| i | case insensitive, con este modificador no distinguirá entre mayúsculas y minúsculas | "/una/i" | busca "una" sin distinguir entre mayúsculas y minúsculas |
| g | global, este modificador se usa para que no se detenga un proceso de sustitución al encontrar la primera ocurrencia | "/a/g" | encontrará todas las "a" para sustituirlas |
| (xyz) | recuerda el patrón para su posterior utilización con multiplicadores o referencias | "(x).(ab)" | para referencias posteriores "x"=$1 y "ab"=$2 |
| Anclas: posición de la cadena | |||
| ˆ | comienzo de línea | "ˆa" "ˆ[aeiou]" "ˆhola" |
"a" al comienzo de una línea una vocal al comienzo de una línea "hola" al comienzo de una línea |
| $ | final de línea | "a$" "[aeiou]$" "hola$" "ˆ$" |
"a" al final de una línea una vocal al final de una línea "hola" al final de una línea una línea vacía |
| \b | principio o final de una palabra | "\bola" | "ola" al principio o final de una palabra |
| Multiplicadores: cuántas veces ha de aparecer la cadena | |||
| * | una cadena cero o más veces | "hola*" "hol(as)*" "[a-z]*" |
"hol", "hola", "holaa" "hol", "holas", "holasas" una palabra en minúsculas |
| + | una cadena una o más veces | "hola+" "hol(as)+" |
"hola", "holaa", "holaaa" "holas", "holasas" |
| ? | una cadena cero o una vez | "hola?" "hol(a)?" |
"hol", "hola" "hol", "holas" |
| {n} | una cadena n veces | "a{3}" "(as){3}" |
"aaa" "asasas" |
| {n,m} | una cadena entre n y m veces | "a{2,4}" "(as){2,4}" |
"aa", "aaa", "aaaa" "asas", "asasas", "asasasas" |
| {n,} | una cadena al menos n veces | "a{2,}" "(as){2,}" |
"aa", "aaa", "aaaa" "asas", "asasas", "asasasas" |
Editor de expresiones regulares en el entorno gráfico
En el entorno gráfico disponemos de varios editores de expresiones regulares:
- Kiki (pythonide.stani.be, paquete kiki): herramienta escrita en Python que permite comprobar expresiones regulares contra un texto de ejemplo (es el editor de expresiones regulares del IDE para Python SPE, Stani's Python Editor).
- Kodos (kodos.sourceforge.net, paquete kodos): herramienta en Python que permite crear y probar expresiones regulares contra un texto de ejemplo.
- Redet (billposer.org/Software/redet.html, paquete redet): herramienta para crear y probar expresiones regulares contra un texto de ejemplo con soporte para numerosos lenguajes de programación.
- Visual REGEXP (laurent.riesterer.free.fr/regexp/, paquete visual-regexp): herramienta en TCL que permite crear y probar expresiones regulares contra un texto de ejemplo.
- Kregexpeditor (KDE Regular expressions editor, paquete kregexpeditor): editor gráfico de expresiones regulares de KDE.