ProgramaciónDesarrollador Perl

Enumere las características de las expresiones regulares de Perl. ¿Cuáles son los modificadores y cómo se procesan correctamente los resultados de la coincidencia? Proporcione un ejemplo de análisis de una cadena utilizando una expresión regular.

Supere entrevistas con el asistente de IA Hintsage

Respuesta

Perl es uno de los lenguajes más poderosos para trabajar con expresiones regulares. Se utilizan los operadores =~ y !~ para hacer coincidencias.

Modificadores de expresiones regulares:

  • i — ignora mayúsculas y minúsculas
  • g — búsqueda global (todos los segmentos encontrados)
  • m — modo multlínea (funciona ^ y $ en cada línea)
  • s — el punto (.) incluye el carácter de nueva línea

Ejemplo:

my $text = "Mi correo electrónico: max@mail.com y ann@ya.ru."; while ($text =~ /([\w.]+@[\w.]+)/g) { print "Correo electrónico: $1 "; }

En este ejemplo, el bucle extrae todos los correos electrónicos de la cadena.

Después de una coincidencia, los valores se capturan en variables especiales $1, $2, ... (por cada grupo de captura).

Pregunta trampa

¿Qué se almacenará en la variable $1 después de una búsqueda fallida con una expresión regular?

Respuesta:

$1 no se actualiza en caso de una coincidencia no exitosa — mantiene el valor de la última coincidencia exitosa. ¡Esto puede ser una fuente de errores! Para evitarlo, en condiciones complejas es mejor limpiar explícitamente $1, $2, ...

Ejemplos de errores reales por falta de conocimiento de los matices del tema


Historia

La validación de datos de entrada con una expresión regular compleja dependía del valor de $1. Después de una coincidencia que no encontró una cadena adecuada, la variable $1 no cambió, y el procesamiento continuó con la antigua dirección de correo electrónico incorrecta.


Historia

El programador se equivocó con el modificador. En un texto grande aplicaron /abc/g, esperando el modo multlínea. Como resultado, el patrón no encontraba las líneas necesarias con saltos de línea, aunque deberían haber usado /abc/ms.


Historia

En el proyecto se olvidaron de utilizar la bandera global /g al buscar todas las coincidencias. Consecuencia: el script solo extraía la primera coincidencia, mientras que el usuario esperaba una lista completa de datos.