Perl 6

Регулярные выражения — 2. Группирующие скобки

Правила регулярных выражений, применяемые в предыдущих версиях Perl допускали наличие круглых скобок, но трактовали их либо как сохраняющие, либо как исключительно группирующие в зависимости от наличия непосредственно после открывающей скобки модификатора ?:. Интересно отметить, что в библиотеке PCRE (реализующей совместимые с Perl регулярные выражения на языке C) предусмотрена опция PCRE_NO_AUTO_CAPTURE, которая позволяет для всего выражения принудительно отключить сохраняющую способность круглых скобок.

В регулярных выражениях Perl 6 функциональность скобок изменена: для того чтобы сгруппировать несколько подвыражений, можно воспользоваться несохраняющими квадратными скобками. Второй пример в каталоге parrot/languages/perl6/t/rx содержит массу примеров использования квадратных скобок:

Обратите внимание на то, что внутри регулярных выражений свободно используются пробелы.

 

sub main() {
   my $s = 'aaacacaaba';
   print "ok 1\n" if $s =~ /aaa | ac | a/;
   print "ok 2\n" if $s =~ /^ [aaaa | ac | b |]/;
   print "ok 3\n" if $s =~ /^ [[aaaa |] | ac | b]/;
   print "ok 4\n" if $s =~ /^ [[aaaa |] ac | b |]/;
   print "ok 5\n" if $s =~ /^ [[[[[aaaa | aaa] | b] | c] | d] | e]/;
   print "ok 6\n" if $s =~ /^ [e | [d | [c | [b | [aaaa | aaa]]]]]/;
   print "ok 7\n" if $s =~ /[[[[[aaaa | a] | b] | c] | d] | e]$/;
   print "ok 8\n" if $s =~ /[e | [d | [c | [b | [aaaa | a]]]]]$/;
}
19 февраля 2004