[ Pobierz całość w formacie PDF ]

cz . Nie potrafi wyja ni semantyki wyra enia, ale nie mo na mie wszystkiego. Za pomoc
prostego programu mog obja nia wyra enia podane w wierszu polece :
#!/usr/bin/perl
use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new( $ARGV[0] )->explain;
Kiedy uruchamiam program nawet z krótkim, prostym wyra eniem, otrzymuj obszerne wyniki:
$ perl yape-explain 'Oto kolejny haker (\S+),'
The regular expression:
(?-imsx:Oto kolejny haker (\S+),)
matches as follows:
Odszyfrowywanie wyra e regularnych | 37
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
Oto kolejny haker 'Oto kolejny haker '
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
\S+ non-whitespace (all but \n, \r, \t, \f,
and " ") (1 or more times (matching the
most amount possible))
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
, ','
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
Ko cowe my li
Dotarlem niemal do ko ca rozdzialu, ale wyra enia regularne maj znacznie wi cej funkcji,
które wydaj mi si przydatne. Czytelnicy mog potraktowa ten podrozdzial jako krótki prze-
wodnik po funkcjach, które mog przestudiowa samodzielnie.
Nie musz ogranicza si do prostych klas znakowych, takich jak \w (znaki slów), \d (cyfry) oraz
inne sekwencje uko nikowe. Mog równie u ywa klas znakowych POSIX. Umieszczam je
w nawiasie kwadratowym z dwukropkiem po obu stronach nazwy:
print "Znalaz em znak alfabetyczny!\n" if $string =~ m/[:alpha:]/;
print "Znalaz em cyfr szesnastkow !\n" if $string =~ m/[:xdigit:]/;
Aby zanegowa te klasy, u ywam daszka (^) po pierwszym dwukropku:
print "Nie znalaz em znaków alfabetycznych!\n" if $string =~ m/[:^alpha:]/;
print "Nie znalaz em spacji!\n" if $string =~ m/[:^space:]/;
Mog uzyska ten sam efekt przez podanie nazwanej wla ciwo ci. Sekwencja \p{Nazwa} (mala
litera p) dol cza znaki odpowiadaj ce nazwanej wla ciwo ci, a sekwencja \P{Nazwa} (wielka
litera P} jest jej dopelnieniem:
print "Znalaz em znak ASCII!\n" if $string =~ m/\p{IsASCII}/;
print "Znalaz em znak kontrolny!\n" if $string =~ m/\p{IsCntrl}/;
print "Nie znalaz em znaków interpunkcyjnych!\n" if $string =~ m/\P{IsPunct}/;
print "Nie znalaz em wielkich liter!\n" if $string =~ m/\P{IsUpper}/;
Modul Regexp::Common zawiera przetestowane i sprawdzone wyra enia regularne dla popular-
nych wzorców, takich jak adresy WWW, liczby, kody pocztowe, a nawet przekle stwa. Oferuje
wielopoziomow tablic asocjacyjn %RE, której warto ciami s wyra enia regularne. Je li komu
to nie pasuje, mo e skorzysta z interfejsu funkcyjnego:
use Regexp::Common;
print "Znalaz em liczb rzeczywist \n" if $string =~ /$RE{num}{real}/;
print "Znalaza em liczb rzeczywist \n" if $string =~ RE_num_real;
38 | Rozdzia 2. Zaawansowane wyra enia regularne
Czytaj dalej... [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • qus.htw.pl