in

Perl – Expresiones regulares


Una expresión regular es una cadena de caracteres que define el patrón o patrones que está viendo. La sintaxis de las expresiones regulares en Perl es muy similar a la que encontrará en otros programas de soporte de expresiones regulares, como sed, grep, y awk.

El método básico para aplicar una expresión regular es utilizar los operadores de enlace de patrones = ~ y !~. El primer operador es un operador de prueba y asignación.

Hay tres operadores de expresiones regulares dentro de Perl.

  • Coincidir con expresión regular – m //
  • Expresión regular sustituta – s ///
  • Transliterar expresión regular – tr ///

Las barras diagonales en cada caso actúan como delimitadores de la expresión regular (regex) que está especificando. Si se siente cómodo con cualquier otro delimitador, puede utilizarlo en lugar de la barra diagonal.

El operador de partidos

El operador de coincidencia, m //, se utiliza para hacer coincidir una cadena o declaración con una expresión regular. Por ejemplo, para hacer coincidir la secuencia de caracteres «foo» con la barra $ escalar, puede usar una declaración como esta:

#!/usr/bin/perl

$bar = "This is foo and again foo";
if ($bar =~ /foo/) {
   print "First time is matchingn";
} else {
   print "First time is not matchingn";
}

$bar = "foo";
if ($bar =~ /foo/) {
   print "Second time is matchingn";
} else {
   print "Second time is not matchingn";
}

Cuando se ejecuta el programa anterior, produce el siguiente resultado:

First time is matching
Second time is matching

En realidad, m // funciona de la misma manera que la serie de operadores q //. Puede usar cualquier combinación de caracteres que coincidan naturalmente para actuar como delimitadores de la expresión. Por ejemplo, m {}, m () y m>

#!/usr/bin/perl

$bar = "This is foo and again foo";
if ($bar =~ m[foo]) {
   print "First time is matchingn";
} else {
   print "First time is not matchingn";
}

$bar = "foo";
if ($bar =~ m{foo}) {
   print "Second time is matchingn";
} else {
   print "Second time is not matchingn";
}

Puede omitir m de m // si los delimitadores son barras inclinadas, pero para todos los demás delimitadores debe usar el prefijo m.

Tenga en cuenta que la expresión de coincidencia completa, que es la expresión a la izquierda de = ~ o! ~ Y el operador de coincidencia, devuelve verdadero (en un contexto escalar) si la expresión coincide. Por lo tanto, la declaración:

$true = ($foo =~ m/foo/);

establecerá $ true en 1 si $ foo coincide con la expresión regular, o 0 si la coincidencia falla. En un contexto de lista, la coincidencia devuelve el contenido de cualquier expresión agrupada. Por ejemplo, al extraer las horas, los minutos y los segundos de una cadena de tiempo, podemos usar:

my ($hours, $minutes, $seconds) = ($time =~ m/(d+):(d+):(d+)/);

Modificadores de operador de coincidencia

El operador de coincidencia admite su propio conjunto de modificadores. El modificador / g permite la coincidencia global. El modificador / i hará que la coincidencia no distinga entre mayúsculas y minúsculas. Aquí está la lista completa de modificadores

No Señor. Modificador y descripción
1

I

Hace que la coincidencia no distinga entre mayúsculas y minúsculas.

2

metro

Especifica que si la cadena tiene caracteres de retorno de carro o de nueva línea, los operadores ^ y $ ahora coincidirán con un límite de nueva línea, en lugar de un límite de cadena.

3

o

Evalúa la expresión solo una vez.

4

s

Permite el uso de. para que coincida con un carácter de nueva línea.

5

X

Le permite utilizar espacios en blanco en la expresión para mayor claridad.

6

gramo

Encuentra globalmente todas las coincidencias.

7

cg

Permite que la búsqueda continúe incluso después de que falle una coincidencia global.

Coincidencia sólo una vez

También existe una versión más simple del operador de coincidencia: el? PATRÓN? operador. Esto es básicamente idéntico al operador m // excepto que solo coincide una vez dentro de la cadena que está buscando entre cada llamada para restablecer.

Por ejemplo, puede usar esto para obtener el primer y último elemento dentro de una lista:

#!/usr/bin/perl

@list = qw/food foosball subeo footnote terfoot canic footbrdige/;

foreach (@list) {
   $first = $1 if /(foo.*?)/;
   $last = $1 if /(foo.*)/;
}
print "First: $first, Last: $lastn";

Cuando se ejecuta el programa anterior, produce el siguiente resultado:

First: foo, Last: footbrdige

Variables de expresión regular

Las variables de expresión regular incluyen PS, que contiene lo que coincida con la última coincidencia de agrupación; PS, que contiene toda la cadena coincidente; $ ‘, que contiene todo antes de la cadena coincidente; y PS, que contiene todo lo que sigue a la cadena coincidente. El siguiente código demuestra el resultado:

#!/usr/bin/perl

$string = "The food is in the salad bar";
$string =~ m/foo/;
print "Before: $`n";
print "Matched: $&n";
print "After: $'n";

Cuando se ejecuta el programa anterior, produce el siguiente resultado:

Before: The
Matched: foo
After: d is in the salad bar

El operador de sustitución

El operador de sustitución, s ///, es en realidad solo una extensión del operador de coincidencia que le permite reemplazar el texto que coincide con algún texto nuevo. La forma básica del operador es:

s/PATTERN/REPLACEMENT/;

El PATRÓN es la expresión regular del texto que estamos buscando. REPLACEMENT es una especificación para el texto o expresión regular que queremos usar para reemplazar el texto encontrado. Por ejemplo, podemos reemplazar todas las apariciones de perro con gato usando la siguiente expresión regular –

#/user/bin/perl

$string = "The cat sat on the mat";
$string =~ s/cat/dog/;

print "$stringn";

Cuando se ejecuta el programa anterior, produce el siguiente resultado:

The dog sat on the mat

Modificadores de operador de sustitución

Aquí está la lista de todos los modificadores usados ​​con el operador de sustitución.

No Señor. Modificador y descripción
1

I

Hace que la coincidencia no distinga entre mayúsculas y minúsculas.

2

metro

Especifica que si la cadena tiene caracteres de retorno de carro o de nueva línea, los operadores ^ y $ ahora coincidirán con un límite de nueva línea, en lugar de un límite de cadena.

3

o

Evalúa la expresión solo una vez.

4

s

Permite el uso de. para que coincida con un carácter de nueva línea.

5

X

Le permite utilizar espacios en blanco en la expresión para mayor claridad.

6

gramo

Reemplaza todas las apariciones de la expresión encontrada con el texto de reemplazo.

7

mi

Evalúa el reemplazo como si fuera una declaración de Perl y usa su valor de retorno como texto de reemplazo.

El operador de traducción

La traducción es similar, pero no idéntica, a los principios de sustitución, pero a diferencia de la sustitución, la traducción (o transliteración) no usa expresiones regulares para su búsqueda de valores de reemplazo. Los operadores de traducción son:

tr/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds

La traducción reemplaza todas las apariciones de los caracteres en SEARCHLIST con los caracteres correspondientes en REPLACEMENTLIST. Por ejemplo, usando «El gato se sentó en la alfombra». cadena que hemos estado usando en este capítulo –

#/user/bin/perl

$string = 'The cat sat on the mat';
$string =~ tr/a/o/;

print "$stringn";

Cuando se ejecuta el programa anterior, produce el siguiente resultado:

The cot sot on the mot.

También se pueden utilizar rangos estándar de Perl, lo que le permite especificar rangos de caracteres por letra o valor numérico. Para cambiar el caso de la cadena, puede utilizar la siguiente sintaxis en lugar de la uc función.

$string =~ tr/a-z/A-Z/;

Modificadores del operador de traducción

A continuación se muestra la lista de operadores relacionados con la traducción.

No Señor. Modificador y descripción
1

C

Complementos LISTA DE BÚSQUEDA.

2

D

Elimina los caracteres encontrados pero no reemplazados.

3

s

Aplasta los caracteres reemplazados duplicados.

El modificador / d elimina los caracteres que coinciden con SEARCHLIST que no tienen una entrada correspondiente en REPLACEMENTLIST. Por ejemplo

#!/usr/bin/perl 

$string = 'the cat sat on the mat.';
$string =~ tr/a-z/b/d;

print "$stringn";

Cuando se ejecuta el programa anterior, produce el siguiente resultado:

b b   b.

El último modificador, / s, elimina las secuencias duplicadas de caracteres que fueron reemplazados, entonces –

#!/usr/bin/perl

$string = 'food';
$string = 'food';
$string =~ tr/a-z/a-z/s;

print "$stringn";

Cuando se ejecuta el programa anterior, produce el siguiente resultado:

fod

Expresiones regulares más complejas

No solo tienes que hacer coincidir cadenas fijas. De hecho, puede hacer coincidir casi cualquier cosa con la que pueda soñar utilizando expresiones regulares más complejas. Aquí hay una hoja de trucos rápida:

La siguiente tabla enumera la sintaxis de expresiones regulares que está disponible en Python.

No Señor. Patrón y descripción
1

^

Coincide con el comienzo de la línea.

2

PS

Coincide con el final de la línea.

3

.

Coincide con cualquier carácter individual excepto nueva línea. El uso de la opción m también le permite hacer coincidir la nueva línea.

4

[…]

Coincide con cualquier carácter individual entre paréntesis.

5

[^…]

Coincide con cualquier carácter individual que no esté entre corchetes.

6

*

Coincide con 0 o más apariciones de la expresión anterior.

7

+

Coincide con 1 o más ocurrencias de la expresión anterior.

8

?

Coincide con 0 o 1 aparición de la expresión anterior.

9

{n}

Coincide exactamente con n número de apariciones de la expresión anterior.

10

{n,}

Coincide con no más apariciones de la expresión anterior.

11

{n, m}

Coincide con al menos n y como máximo m apariciones de la expresión anterior.

12

a | B

Coincide con a o b.

13

w

Coincide con caracteres de palabra.

14

W

Coincide con caracteres que no son palabras.

15

s

Coincide con los espacios en blanco. Equivalente a [tnrf].

dieciséis

S

Coincide con espacios que no son en blanco.

17

D

Coincide con dígitos. Equivalente a [0-9].

18

D

Coincide con no dígitos.

19

A

Coincide con el comienzo de la cadena.

20

Z

Coincide con el final de la cuerda. Si existe una nueva línea, coincide justo antes de la nueva línea.

21

z

Coincide con el final de la cuerda.

22

GRAMO

Los partidos apuntan donde terminó el último partido.

23

B

Coincide con los límites de las palabras cuando están fuera de los corchetes. Coincide con el retroceso (0x08) cuando está entre corchetes.

24

B

Coincide con los límites que no son de palabras.

25

n, t, etc.

Coincide con nuevas líneas, retornos de carro, pestañas, etc.

26

1 … 9

Coincide con la enésima subexpresión agrupada.

27

10

Coincide con la enésima subexpresión agrupada si ya coincidió. De lo contrario, se refiere a la representación octal de un código de carácter.

28

[aeiou]

Coincide con un solo carácter en el conjunto dado

29

[^aeiou]

Coincide con un solo carácter fuera del conjunto dado

El metacarácter ^ coincide con el comienzo de la cadena y el metasímbolo $ coincide con el final de la cadena. A continuación se muestran algunos ejemplos breves.

# nothing in the string (start and end are adjacent)
/^$/   

# a three digits, each followed by a whitespace
# character (eg "3 4 5 ")
/(ds) {3}/  

# matches a string in which every
# odd-numbered letter is a (eg "abacadaf")
/(a.)+/  

# string starts with one or more digits
/^d+/

# string that ends with one or more digits
/d+$/

Echemos un vistazo a otro ejemplo.

#!/usr/bin/perl

$string = "Cats go CatatonicnWhen given Catnip";
($start) = ($string =~ /A(.*?) /);
@lines = $string =~ /^(.*?) /gm;
print "First word: $startn","Line starts: @linesn";

Cuando se ejecuta el programa anterior, produce el siguiente resultado:

First word: Cats
Line starts: Cats When

Límites coincidentes

los B coincide con cualquier límite de palabra, según lo definido por la diferencia entre la clase w y la clase W. Debido a que w incluye los caracteres de una palabra y W lo contrario, esto normalmente significa la terminación de una palabra. los B La aserción coincide con cualquier posición que no sea un límite de palabras. Por ejemplo

/bcatb/ # Matches 'the cat sat' but not 'cat on the mat'
/BcatB/ # Matches 'verification' but not 'the cat on the mat'
/bcatB/ # Matches 'catatonic' but not 'polecat'
/Bcatb/ # Matches 'polecat' but not 'catatonic'

Selección de alternativas

El | carácter es como el estándar o bit a bit OR dentro de Perl. Especifica coincidencias alternativas dentro de una expresión regular o grupo. Por ejemplo, para hacer coincidir «gato» o «perro» en una expresión, puede usar esto:

if ($string =~ /cat|dog/)

Puede agrupar individual …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Clase Java FileInputStream – javatpoint

apple touch icon@2

SQL Server: cómo calcular el porcentaje con una declaración SQL