Cómo utilizar expresiones regulares en Perl para el procesamiento de texto

Perl ha sido desde hace mucho tiempo una opción extremadamente popular para el procesamiento de texto debido a su soporte nativo de expresiones regulares. En esta guía, te daremos un resumen rápido de cómo puedes usar las expresiones regulares en tus propios programas para tener más control sobre la búsqueda y sustitución de texto.

Índice de Contenido
  1. La operación de coincidencia
  2. Especificando conjuntos de caracteres
  3. La operación de rama
  4. Expresiones regulares para números de teléfono

La operación de coincidencia

La operación de coincidencia devuelve verdadero si el patrón se encuentra en la cadena. Entonces, la siguiente expresión:

$cadena =~ m/texto/

será verdadera solo si la cadena en la variable "$cadena" contiene la subcadena "texto". Esta es la forma más básica de expresiones regulares, donde cada caracter se compara literalmente. Esto, por supuesto, es solo una muestra de lo que pueden hacer las expresiones regulares. Tomemos el ejemplo de la necesidad de encontrar palabras de cuatro letras que terminen en "ext". Para esto, usamos el carácter especial ".", un punto en una expresión regular indica a Perl que coincida con cualquier caracter singular en su lugar. Entonces, la expresión:

$cadena =~ m/.ext/

hará coincidir las palabras "texto" o "next".

Cómo funcionan las reglas CSS en un sitio web: una guía completa

Sin embargo, esta expresión no es perfecta, ya que también hará coincidir partes de palabras más largas que contengan "ext", como "dextrous" y "flextime". Podemos restringir la posición en la que puede ocurrir la coincidencia usando anclas. El carácter "^" coincide con el inicio de la cadena, por lo que:

$cadena =~ m/^.ext/

coincidirá con "dextrous", pero no con "context".

De manera similar, el carácter "$" coincide con el final de la cadena:

$cadena =~ m/.ext$/

coincidirá con "context", pero no con "dextrous".

Cómo utilizar las propiedades Dock y Anchor en WinForms

Si deseas hacer coincidir solo cadenas de cuatro letras que terminen en "ext", puedes combinar estas dos expresiones de la siguiente manera:

$cadena =~ m/^.ext$/

Especificando conjuntos de caracteres

¿Y si necesitas hacer coincidir un conjunto específico de caracteres, en lugar de cualquier caracter en lugar del punto? Las expresiones regulares proporcionan una forma de hacer esto mediante el uso de corchetes. Toma la siguiente expresión:

$cadena =~ m/^[tT]ext$/

Esto coincidirá solo con las palabras "texto" y "Text", pero no, por ejemplo, con "next". Un par de corchetes coincidirá con cualquier caracter individual contenido dentro de ellos. Esto es bastante poderoso, por ejemplo:

$cadena =~ m/[aeiouAEIOU]/

Qué es un GUID y cómo se utiliza en el desarrollo de software

El ejemplo anterior es verdadero si $cadena contiene alguna vocal.

Si el primer caracter dentro de los corchetes es un "^", en lugar de actuar como ancla, niega la lista, haciéndola coincidir con cualquier cosa que no esté contenida dentro de los corchetes. Por lo tanto, ajustando el ejemplo anterior para que sea verdadero solo si $cadena contiene consonantes o puntuación:

$cadena =~ m/[^aeiouAEIOU]/

La notación de corchetes también te permite especificar rangos de caracteres, para evitar tener que enumerar una serie completa de números o letras consecutivas, por ejemplo. El siguiente ejemplo coincide con cualquier caracter en minúscula:

$cadena =~ m/[a-z]/

La operación de rama

Hasta ahora hemos estado tratando nuestras cadenas de un caracter a la vez, pero la mayoría de las veces necesitamos tener opciones más complicadas. Una forma de hacer esto es mediante el uso de la operación de rama "|". Digamos que queremos verificar si $cadena contiene la subcadena "next" o "previous", entonces podríamos usar lo siguiente:

Los mejores atajos de teclado para bash y zsh en la línea de comandos

$cadena =~ m/next|previous/

Si deseamos usar anclas junto con esta expresión, debemos agrupar las opciones juntas, para hacer esto usamos paréntesis, al igual que en aritmética. Entonces, si queremos ajustar esto para que coincida solo con "next" o "previous" al inicio de la cadena, escribiríamos:

$cadena =~ m/^(next|previous)/

Todos estos operadores son lo que llamamos operadores atómicos, es decir, corresponden a un solo caracter. Sin embargo, la verdadera fortaleza de las expresiones regulares radica en cómo manejan la repetición. Para ilustrar esto, tomemos el ejemplo de necesitar determinar si una cadena contiene un número de teléfono válido. Usaremos la definición más simple de un número para comenzar; solo buscaremos cualquier serie de números. Podríamos comenzar usando el operador "glob", que se escribe "*", el cual muchos estarán familiarizados del uso como comodín en la línea de comandos, y tiene un uso similar en Perl, correspondiendo a cualquier cantidad del caracter anterior. Por lo tanto:

$cadena =~ m/a*/

coincide con cualquier cantidad de "a" y ahora haremos coincidir cualquier cantidad de dígitos:

Visual Studio 2008: La nueva versión con la función Visual Studio Shell

$cadena =~ m/[0-9]*/

Esto no es exactamente lo que queremos, ya que coincidirá con cualquier cantidad, incluso cero. Podríamos haber usado "+" en su lugar, que coincidirá con uno o más del caracter anterior, pero eso no solucionaría el problema de encontrar números que son demasiado largos o demasiado cortos. Lo que realmente queremos es especificar exactamente cuántas repeticiones estamos buscando, en este caso, siete. Esto se puede hacer usando llaves:

$cadena =~ m/^[0-9]{7}$/

Esto se acerca más a lo que estamos buscando, coincidirá solo con una cadena que contenga un número de siete dígitos. Las llaves tienen algunas opciones adicionales que las hacen una forma poderosa de especificar repeticiones. Por ejemplo, puedes coincidir con un rango de repeticiones:

$cadena =~ m/[0-9]{6,8}/

Esto coincidirá con entre seis y ocho dígitos, pero si lo reemplazáramos con "{6,}", podríamos coincidir con seis o más dígitos, mientras que "{,8}" coincide con ocho o menos.

15 formas de maximizar la duración de la batería de tu laptop

Expresiones regulares para números de teléfono

Echemos otro vistazo a esos números de teléfono, por el momento esto está funcionando bien, pero todavía es un poco restrictivo. Siempre que estés tratando con la entrada de un usuario, debes anticipar que las personas lo harán de diferentes formas.

Es una buena idea tratar de anticipar algunos de los formatos más comunes para ingresar un número de teléfono. Por ejemplo, tomemos el número "2391720", esto podría ingresarse como "239-1720" o "239 1720". Ahora podemos usar corchetes para coincidir con un "-" o un espacio en blanco, pero necesitamos algo nuevo para manejar el caso de no tener un separador en absoluto: el operador "?", que significa que el caracter anterior puede o no encontrarse. Podemos coincidir con los tres formatos con la siguiente expresión:

$cadena =~ m/[0-9]{3}[- ]?[0-9]{4}/

De manera similar, echemos un vistazo a los códigos de área. Los números de teléfono australianos tienen un código de área de dos dígitos, agreguémoslos de la siguiente manera:

$cadena =~ m/([0-9]{2}[- ]?)?[0-9]{3}[- ]?[0-9]{4}/

Esta expresión coincidirá con números como "02 114 7682" y, dado que envolvimos la parte del código de área en paréntesis y lo hicimos opcional, también coincidirá con todo lo que coincida con la expresión anterior. Hay más mejoras que se podrían hacer, como permitir que el código de área esté encerrado entre "(" y ")", pero como puedes ver, cuanto más opciones agregas a la expresión, más larga y complicada se vuelve, así que dejaré eso en tus manos.

Cómo buscar archivos MP3 en Google utilizando una consulta especial

Únete a nosotros la próxima vez mientras profundizamos más en las expresiones regulares, incluyendo sustituciones, traducciones y cómo puedes construir programas Perl en torno a las expresiones regulares que necesites.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo utilizar expresiones regulares en Perl para el procesamiento de texto , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.