Expresiones regulares de Perl
Una expresión regular describe un patrón de coincidencia de cadenas, que se puede utilizar para comprobar si una cadena contiene algún tipo de subcadena, reemplazar las subcadenas coincidentes o extraer de una cadena las subcadenas que cumplen cierta condición.
Las expresiones regulares de Perl son muy potentes, básicamente las más potentes entre los lenguajes de uso común. Muchos lenguajes han tomado como referencia las expresiones regulares de Perl al diseñar su soporte de expresiones regulares.
Las tres formas de expresiones regulares en Perl son: coincidencia, sustitución y transliteración:
Coincidencia: m/
/ (también se puede abreviar como / /, omitiendo m) Sustitución: s/
/ / Transliteración: tr/
/ /
Estas tres formas generalmente se combinan con=~o!~=~ y !~; =~ indica coincidencia, !~ indica no coincidencia.
Operador de coincidencia
El operador de coincidencia m// se utiliza para hacer coincidir una cadena o una expresión regular. Por ejemplo, para hacer coincidir "run" en el escalar $bar, el código es el siguiente:
Ejemplo
Al ejecutar el programa anterior, el resultado es:
Primera coincidencia
Modificadores de coincidencia de patrones
La coincidencia de patrones tiene algunos modificadores comunes, como se muestra en la siguiente tabla:
| Modificador | Descripción |
|---|---|
| i | Ignorar mayúsculas y minúsculas en el patrón |
| m | Modo multilínea |
| o | Asignar solo una vez |
| s | Modo de una sola línea: "." coincide con "\n" (por defecto no coincide) |
| x | Ignorar los espacios en blanco en el patrón |
| g | Coincidencia global |
| cg | Después de que falla la coincidencia global, permite buscar nuevamente la cadena coincidente |
Variables de expresión regular
Después del procesamiento, Perl guarda los valores coincidentes en tres variables especiales:
- $`: La cadena anterior a la parte coincidente
- $&: La cadena coincidente
- $': La cadena restante que aún no se ha coincidido
Si se colocan estas tres variables juntas, se obtiene la cadena original.
El ejemplo es el siguiente:
Ejemplo
Al ejecutar el programa anterior, el resultado es:
匹配前的字符串: welcome to 匹配的字符串: run 匹配后的字符串: oob site.
Operador de sustitución
El operador de sustitución s/// es una extensión del operador de coincidencia; reemplaza la cadena especificada con una nueva cadena. El formato básico es el siguiente:
s/PATTERN/REPLACEMENT/;
PATTERN es el patrón de coincidencia y REPLACEMENT es la cadena de reemplazo.
Por ejemplo, reemplazaremos "google" por "ejemplo" en la siguiente cadena:
Ejemplo
Al ejecutar el programa anterior, el resultado es:
welcome to ejemplo site.
Modificadores del operador de sustitución
Los modificadores del operador de sustitución se muestran en la siguiente tabla:
| Modificador | Descripción |
|---|---|
| i | Si se añade "i" al modificador, la expresión regular dejará de ser sensible a mayúsculas y minúsculas, es decir, "a" y "A" son iguales. |
| m | De forma predeterminada, el inicio "^" y el final "$" de la expresión regular se aplican solo a la cadena completa. Si se añade "m" al modificador, el inicio y el final se referirán a cada línea de la cadena: el comienzo de cada línea es "^" y el final es "$". |
| o | La expresión se ejecuta solo una vez. |
| s | Si se añade "s" al modificador, el "." predeterminado, que representa cualquier carácter excepto el salto de línea, se convertirá en cualquier carácter, es decir, incluyendo el salto de línea. |
| x | Si se añade este modificador, los caracteres de espacio en blanco en la expresión se ignorarán, a menos que hayan sido escapados. |
| g | Reemplaza todas las cadenas coincidentes. |
| e | La cadena de reemplazo se evalúa como una expresión. |
Operador de transliteración
Los siguientes son los modificadores relacionados con el operador de transliteración:
| Modificador | Descripción |
|---|---|
| c | Translitera todos los caracteres no especificados |
| d | Elimina todos los caracteres especificados |
| s | Comprime múltiples caracteres de salida idénticos en uno solo |
El siguiente ejemplo convierte todas las letras minúsculas de la variable $string en mayúsculas:
Ejemplo
Al ejecutar el programa anterior, el resultado es:
WELCOME TO EJEMPLO SITE.
El siguiente ejemplo usa /s para eliminar los caracteres repetidos de la variable $string:
Ejemplo
Al ejecutar el programa anterior, el resultado es:
runob
Más ejemplos:
$string =~ tr/\d/ /c; # 把所有非数字字符替换为空格 $string =~ tr/\t //d; # 删除tab和空格 $string =~ tr/0-9/ /cs # 把数字间的其它字符替换为一个空格。
Más reglas de expresiones regulares
| Expresión | Descripción |
|---|---|
| . | Coincide con todos los caracteres excepto el salto de línea |
| x? | Coincide con la cadena x 0 o 1 vez |
| x* | Coincide con la cadena x 0 o más veces, pero con el menor número de coincidencias posible |
| x+ | Coincide con la cadena x 1 o más veces, pero con el menor número de coincidencias posible |
| .* | Coincide con cualquier carácter 0 o más veces |
| .+ | Coincide con cualquier carácter 1 o más veces |
| {m} | Coincide exactamente con m ocurrencias de la cadena especificada |
| {m,n} | Coincide con entre m y n ocurrencias de la cadena especificada |
| {m,} | Coincide con m o más ocurrencias de la cadena especificada |
| [] | Coincide con los caracteres que están dentro de [] |
| [^] | Coincide con los caracteres que no están dentro de [] |
| [0-9] | Coincide con todos los caracteres de dígitos |
| [a-z] | Coincide con todos los caracteres de letras minúsculas |
| [^0-9] | Coincide con todos los caracteres que no son dígitos |
| [^a-z] | Coincide con todos los caracteres que no son letras minúsculas |
| ^ | Coincide con el carácter al comienzo de la cadena |
| $ | Coincide con el carácter al final de la cadena |
| \d | Coincide con un carácter de dígito, igual que la sintaxis [0-9] |
| \d+ | Coincide con uno o más dígitos, igual que la sintaxis [0-9]+ |
| \D | No dígito, por lo demás igual que \d |
| \D+ | No dígitos, por lo demás igual que \d+ |
| \w | Cadena de letras, dígitos o guion bajo, igual que la sintaxis [a-zA-Z0-9_] |
| \w+ | Igual que la sintaxis [a-zA-Z0-9_]+ |
| \W | Cadena que no es letra ni dígito, igual que la sintaxis [^a-zA-Z0-9_] |
| \W+ | Igual que la sintaxis [^a-zA-Z0-9_]+ |
| \s | Espacio en blanco, igual que la sintaxis [\n\t\r\f] |
| \s+ | Igual que [\n\t\r\f]+ |
| \S | No espacio en blanco, igual que la sintaxis [^\n\t\r\f] |
| \S+ | Igual que la sintaxis [^\n\t\r\f]+ |
| \b | Coincide con cadenas que tienen límites de letras o dígitos |
| \B | Coincide con cadenas que no tienen límites de letras o dígitos |
| a|b|c | Coincide con cadenas que contienen el carácter a, o el carácter b, o el carácter c |
| abc | Coincide con cadenas que contienen abc (pattern) () Este símbolo recuerda las cadenas encontradas; es una sintaxis muy práctica. La cadena encontrada dentro del primer () se convierte en la variable $1 o \1; la del segundo () se convierte en $2 o \2, y así sucesivamente. |
| /pattern/i | i Este parámetro indica ignorar las mayúsculas y minúsculas del inglés, es decir, al hacer coincidir cadenas, no se consideran las diferencias de mayúsculas y minúsculas. \ Si desea buscar un carácter especial, como "*", dentro del patrón pattern, debe añadir el símbolo \ delante de este carácter para que el carácter especial pierda su efecto. |
Más referencias
Expresiones regulares:https://www.example.com/regexp/regexp-tutorial.html
Expresiones regulares de Perl:https://perldoc.perl.org/perlre#Regular-Expressions
Otras extensiones