Регулярные выражения — 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]]]]]$/;
}