Среда: Perl 5.26.2 x64 на Cygwin x64.
Вопрос: после my $re = qr/...(capturing group).../
, есть ли способ использовать $re
без захватав его группы захвата?
X: Я сопоставляю строки, которые могут быть:
#define FOO(X,Y) SomeComplicatedStuff
или
#define FOO(X,Y) BAR(X,Y)
У меня естьскомпилированное регулярное выражение $re
, которое соответствует FOO(X,Y)
и включает пронумерованные группы захвата, чтобы разбить совпадение на FOO
и X,Y
.Я хотел бы сопоставить строки второй формы без необходимости определять отдельное регулярное выражение, например, используя m/$re.+$re/
.Это прекрасно работает, но я получаю все группы захвата FOO
, когда все, что мне действительно нужно, это группы BAR
.
Y: Я думал, что смогу сделать это в5.22+ с модификатором /n
, но я не могу заставить его работать.MCVE:
$ perl -E 'my $re=qr/(foo|bar)/; "foobar" =~ m/$re$re/; say $1, " ", $2;'
foo bar # as expected
$ perl -E 'my $re=qr/(foo|bar)/; "foobar" =~ m/(?n:$re)$re/; say $1, " ", $2;'
# I think this should turn off ^^^ capturing of `foo`
foo bar # oops - I was hoping for `bar`
$ perl -E 'my $re=qr/(foo|bar)/; "foobar" =~ m/(?n:(foo|bar))$re/; say $1, " ", $2;'
bar # This works, but I had to inline $re within (?n:...).
Примечание: Я также пытался \K
:
$ perl -E 'my $re=qr/(foo|bar)/; "foobar" =~ m/$re\K$re/; say $1, " ", $2, " ", $&;'
foo bar bar # was hoping for `bar bar`
Редактировать Забыл упомянуть - я смотрел на этот связанный вопрос , но это не то же самое постановка проблемы.