O modificador /a em expressões regulares Perl

Quando você usa expressões regulares em Perl você pode usar o modificador /a.

A adição de um modificador /a altera o comportamento \d, \w e \s:

  • Se o modificador /a não for especificado, então esses kits incluem um número de caracteres do Unicode.
  • Se houver um modificador /a, estes conjuntos de caracteres incluem caracteres a partir de um intervalo ASCII

Assim mudando o comportamento \D, \W e \S.

\d

Quando você especificar um modificador /a conjunto de caracteres \d inclui apenas 10 caracteres — os números de 0 até 9. Se o modificador /a não for especificado, o \d significa tudo uma série de símbolos, que são as figuras em Unicode.

Aqui está um exemplo 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;
}

O programa exibirá o que foi apreendido com o \d+ e é o texto ٢4௪၂၃. Nesse código, o modificador /a não especificado, e, portanto, \d , captura tudo o que é considerado um dígito no Unicode, e isso não é apenas 10 dígitos de 0 a 9, mas uma infinidade de outros personagens, que são utilizados em diferentes idiomas.

Se este código de adicionar o modificador /a: if ($str =~ /(\d+)/a) {, o programa de exibirá um símbolo — o número de 4, como no caso do \d significa apenas de 10 caracteres.

Exemplos de caracteres que o Perl acredita Unicode em números, você pode descobrir usando esse 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

Quando você usa o /a conjunto de caracteres de \s para a versão Perl 5.18 inclui 5 caracteres, e a partir da versão Perl 5.18 inclui 6 de caracteres:

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

Se o modificador /a não for especificado, o \s inclui mais caracteres (aqueles que são пробельными caracteres em Unicode).

\w

Quando você usa o /a de conjunto de caracteres de \w inclui 63 caracteres e funciona da mesma como [A-Za-z0-9_].

Se /a de não se usar, \w inclui mais de 50 mil diferentes de caracteres Unicode.

A Versão Do Perl

O modificador /a apareceu pela primeira vez na versão do Perl 5.14. Se você tentar usá-lo até 5.14, haverá um erro de execução do código é interrompido. Por exemplo, o código 'abc' =~ /\w/a; , na versão de Perl 5.10 emitirá uma mensagem de erro:

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.

Outros artigos