El modificador /a en las expresiones regulares de Perl

Al uso de las expresiones regulares en Perl se puede utilizar el modificador /a.

La adición del modificador /a cambia el comportamiento de \d, \w y \s:

  • Si el modificador /a no se especifica, estos kits incluyen gran cantidad de caracteres de Unicode.
  • Si tiene un modificador de /a, estos conjuntos de caracteres incluyen sólo los caracteres del rango ASCII

Así se cambia la conducta de \D, \W y \S.

\d

Cuando se especifica el modificador /a el conjunto de caracteres \d incluye sólo 10 caracteres las cifras de 0 hasta 9. Si el modificador /a no se especifica, \d , se refiere a todos un montón de personajes, que son los números en Unicode.

He aquí un ejemplo de código:

▶ Run
#!/usr/bin/perl

use utf8;
use open qw(:std :utf8);
use strict;
use warnings;

my $str = '٢4௪၂၃';

if ($str =~ /(\d+)/) {
    print $1;
}

El programa mostrará en pantalla lo que fue capturado con la ayuda de \d+ y este será el texto ٢4௪၂၃. En este código, el modificador /a no se especifica, y por lo tanto \d , captura todo lo que se considera una cifra en Unicode, pero no es sólo 10 dígitos del 0 al 9, pero un montón de otros caracteres que se usan en diferentes idiomas.

Si en este código para agregar el modificador /a: if ($str =~ /(\d+)/a) {, el programa de muestra el número de 4, ya que en este caso \d significa que sólo el 10 caracteres.

Ejemplos de símbolos que Perl considera Unicode cifras se puede averiguar mediante este código:

▶ Run
#!/usr/bin/perl

use utf8;
use open qw(:std :utf8);
use strict;
use warnings;

foreach my $i (0..65535) {
    print chr($i) if chr($i) =~ /\d/;
}

\s

Cuando se utiliza /a conjunto de caracteres \s a la versión de Perl 5.18 incluye 5 caracteres y a partir de la versión de Perl 5.18 incluye 6 caracteres:

  • "\t", chr(9), "\N{CHARACTER TABULATION}"
  • "\n", chr(10), "\N{LINE FEED}"
  • "\x0B", chr(11), "\N{LINE TABULATION}" — a partir de la versión de Perl 5.18
  • "\f", chr(12), "\N{FORM FEED}"
  • "\r", chr(13), "\N{CARRIAGE RETURN}"
  • ' ', chr(32), "\N{SPACE}"

Si el modificador /a no se especifica, \s incluye más caracteres (los que son espacios en blanco caracteres en Unicode).

\w

Cuando se utiliza /a de muchos caracteres \w incluye 63 caracteres y funciona de la misma como [A-Za-z0-9_].

Si /a no utilizar, \w incluye más de 50 mil diferentes caracteres de Unicode.

La Versión De Perl

El modificador /a apareció por primera vez en la versión de Perl 5.14. Si intenta utilizar hasta 5.14, lo que se producirá un error y la ejecución del código se detiene. Por ejemplo, el código de 'abc' =~ /\w/a; en la versión de Perl 5.10 generará un error:

Bareword found where operator expected at script.pl line 3, near "/\w/a"
    (Missing operator before a?)
syntax error at script.pl line 3, near "/\w/a"
Execution of script.pl aborted due to compilation errors.

Otros articulos