Modifier /a i regulære udtryk i Perl

Når du bruger regulære udtryk i Perl, så kan du bruge modifier /a.

Tilføj modifier /a ændrer adfærd \d, \w og \s:

  • Hvis modifier /a ikke er angivet, er disse sæt indeholder mange figurer fra Unicode.
  • I tilstedeværelse af en modifier /a, indeholder disse tegn kun indeholde tegnene i ASCII-udvalg

Ændringer i adfærd \D, \W og \S.

\d

Når du angiver det modifier /a tegnsæt \d indeholder kun 10 tegn — tallene 0 til 9. Hvis modifier /a er ikke angivet, \d : alle en masse tegn, der er cifre i Unicode.

Her er et eksempel kode:

▶ Run
#!/usr/bin/perl

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

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

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

Programmet vil vise, hvad der blev fanget ved hjælp \d+ , og det er den tekst, ٢4௪၂၃. I denne kode, de ændringstaster, der er /a er ikke specificeret, og derfor \d fanger alle, der betragtes som en figur i Unicode, og det er ikke kun 10 cifre fra 0 til 9, men et væld af andre tegn, der anvendes på forskellige sprog.

Hvis denne kode tilføje modifier /a: if ($str =~ /(\d+)/a) {, programmet viser en enkelt karakter, antallet 4, som i dette tilfælde \d betyder blot 10 tegn.

Eksempler på tegn, der Perl mener Unicode-numre kan findes ved hjælp af denne kode:

▶ 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

Når du bruger /a mange tegn \s til Perl version 5.18 omfatter 5 tegn, men fra Perl 5.18 omfatter 6 tegn:

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

Hvis modifier /a er ikke angivet, \s indeholder flere tegn (dem der er blanke tegn i Unicode).

\w

Når du bruger /a mange tegn \w omfatter 63 symbol og fungerer på samme som [A-Za-z0-9_].

Hvis /a er ikke benyttes, er det \w omfatter mere end 50 tusindvis af forskellige Unicode-tegn.

Perl Version

Modifier /a dukkede første gang op i Perl 5.14. Hvis du forsøger at bruge det før 5.14, at der vil være en fejl og kode vil blive stoppet. For eksempel er koden 'abc' =~ /\w/a; Perl 5.10 vil resultere i en fejl:

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.

Andre artikler