Il modificatore /a nelle espressioni regolari Perl

Quando si utilizza espressioni regolari in Perl è possibile utilizzare il modificatore /a.

Aggiungere il modificatore /a modifica il comportamento \d, \w e \s:

  • Se il modificatore /a non viene specificato, allora questi kit comprendono un sacco di caratteri di Unicode.
  • Se si dispone di un modificatore di /a, questi set di caratteri includono solo i simboli dall'intervallo ASCII

Così cambia il comportamento \D, \W e \S.

\d

Quando si specifica un modificatore /a set di caratteri \d comprende solo 10 caratteri — i numeri da 0 fino 9. Se il modificatore /a non specificato, \d significa tutto una serie di personaggi che sono cifre Unicode.

Ecco un esempio di codice:

▶ Run
#!/usr/bin/perl

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

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

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

Il programma visualizzerà sullo schermo quello che è stato catturato con l'aiuto di \d+ e questo sarà il testo ٢4௪၂၃. In questo codice modificatore /a non è specificato, e quindi \d cattura tutto ciò che è considerato cifra in Unicode, e non è solo 10 cifre da 0 a 9, ma anche molti altri personaggi che sono utilizzati in diverse lingue.

Se a questo codice di aggiungere un modificatore di /a: if ($str =~ /(\d+)/a) {, il programma verrà visualizzato un simbolo — il numero di 4, come in questo caso, \d significa solo 10 caratteri.

Esempi di caratteri che Perl ritiene Unicode i numeri si può capire con questo codice:

▶ 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 si utilizza /a numero di caratteri \s prima versione di Perl 5.18 comprende 5 personaggi, e a partire dalla versione di Perl 5.18 comprende 6 caratteri:

  • "\t", chr(9), "\N{CHARACTER TABULATION}"
  • "\n", chr(10), "\N{LINE FEED}"
  • "\x0B", chr(11), "\N{LINE TABULATION}" — a partire dalla versione di Perl 5.18
  • "\f", chr(12), "\N{FORM FEED}"
  • "\r", chr(13), "\N{CARRIAGE RETURN}"
  • ' ', chr(32), "\N{SPACE}"

Se il modificatore /a non viene specificato, il \s coinvolge più personaggi (quelli che sono spazi vuoti caratteri Unicode).

\w

Quando si utilizza /a numero di caratteri \w comprende 63 caratteri e funziona allo stesso modo come [A-Za-z0-9_].

Se /a non usare \w comprende più di 50 mila differenti caratteri Unicode.

La Versione Di Perl

Il modificatore /a apparso nella versione Perl 5.14. Se si tenta di utilizzarlo a 5.14, quello è un errore e l'esecuzione di codice verrà interrotta. Ad esempio, il codice 'abc' =~ /\w/a; sulla versione di Perl 5.10 genera un errore:

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.

Altri articoli