Modificateur /a dans les expressions régulières de Perl

Lors de l'utilisation des expressions régulières en Perl, vous pouvez utiliser le modificateur /a.

Ajouter le modificateur de /a modifie le comportement \d, \w et \s:

  • Si le modificateur /a n'est pas spécifié, ces kits comprennent une grande variété de caractères Unicode.
  • Si vous disposez d'un modificateur /a, ces jeux de caractères comprennent uniquement des caractères de la plage ASCII

Aussi de changer le comportement \D, \W et \S.

\d

Lorsque vous spécifiez un modificateur /a le jeu de caractères \d ne comprend que 10 caractères les chiffres de 0 à 9. Si le modificateur /a n'est pas spécifié, \d signifie tout une multitude de personnages, qui sont des chiffres en Unicode.

Voici un exemple de code:

▶ Run
#!/usr/bin/perl

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

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

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

Le programme affichera ce qui a été capturé à l'aide de \d+ et ce sera le texte ٢4௪၂၃. Dans ce code, le modificateur /a n'est pas spécifié, et donc \d capte tout ce qui est considéré comme le chiffre en Unicode, et ce n'est pas seulement les 10 chiffres de 0 à 9, mais de nombreux autres caractères, qui sont utilisés dans différentes langues.

Si ce code d'ajouter un modificateur /a: if ($str =~ /(\d+)/a) {, le programme affiche un symbole — le nombre de 4, comme dans ce cas \d signifie que 10 caractères.

Exemples de symboles qui Perl estime de l'Unicode des chiffres que vous pouvez découvrir à l'aide de ce code:

▶ 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

Lors de l'utilisation de /a une multitude de personnages \s à la version de Perl 5.18 comprend 5 caractères et depuis la version Perl 5.18 comprend 6 caractères:

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

Si le modificateur /a n'est pas spécifié, \s comprend plus de caractères (ceux qui sont пробельными des caractères Unicode).

\w

Lors de l'utilisation de /a de nombreux caractères \w comprend 63 caractères et fonctionne comme [A-Za-z0-9_].

Si /a ne pas l'utiliser, \w comprend plus de 50 millions de différents caractères Unicode.

La Version De Perl

Le modificateur /a pour la première fois apparu dans la version de Perl 5.14. Si vous essayez de l'utiliser jusqu'à 5.14, ce serait une erreur et l'exécution de code sera arrêté. Par exemple, le code 'abc' =~ /\w/a; sur la version de Perl 5.10 affiche une erreur:

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.

Autres articles