
nota XVI. Регексы
Что с регулярными выражениями (регексами)? Вроде бы они претерпели серьёзные изменения. Будем потихоньку разбираться. Теперь для поиска по шаблону надо использовать ~~:| | #!/usr/bin/perl6
my $text='Anno 2010. perl6.su stiti. ';
if ($text ~~ m/(\d\d\d\d)/) {
$0.say;
} | | => <2010>
|
Bene. Легко заметить, что $1 теперь $0:| | #!/usr/bin/perl6
my $text='Anno 2010. perl6.su stiti. ';
if ($text ~~ m/(\d\d\d\d).+(\d+)/) {
$0.say;
$1.say;
} | | => <2010>
=> <6>
|
Вот. Всяческие пробелы сейчас служат украшательским целям в первую очередь:| | #!/usr/bin/perl6
my $text='Anno 2010. perl6.su stiti. ';
if ($text ~~ m/
( \d\d\d\d )
.+
( \d+ )
/
) {
$0.say;
$1.say;
} | | => <2010>
=> <6>
|
А если так?| | #!/usr/bin/perl6
my $text='NotaBene';
if ($text ~~ m/ Nota Bene /) {
'N.B.'.say;
} | | N.B. |
Теперь только цифро-буквы плюс подчеркивание означают сами себя. Остальное надо экранировать или заключать в кавычки.| | #!/usr/bin/perl6
my $text='NotaBene';
if ($text ~~ m/ Nota' 'Bene /) { 'N.B.'.say }
else {'P.S.'.say} | | P.S. |
Иногда удобнее может быть так:| | #!/usr/bin/perl6
my $text='NotaBene';
if ($text ~~ m/ 'Nota Bene' /) { 'N.B.'.say }
else {'P.S.'.say} | | P.S. |
N.B. В регулярных выражениях 'Nota Bene' и 'Nota\ Bene' разные вещи. # mutatio postrema: 18 Sep 2010
|