我想要匹配一个包含多个(.*)
捕获组的通过程序构建的正则表达式。我将这个正则表达式作为一个字符串保存,比如说
my $rx = "(.*)a(.*)b(.*)"
我想将该字符串作为正则表达式进行插值并进行匹配。 文档 告诉我应该使用 <$rx>
(即将该字符串作为正则表达式插值)来实现,但它并没有成功。请比较匹配的输出(在perl6
REPL中):
> 'xaybz' ~~ rx/<$rx>/
「xaybz」
与期望/期望的输出相比,将捕获组设置为分开的:
> 'xaybz' ~~ rx/(.*)a(.*)b(.*)/
「xaybz」
0 => 「x」
1 => 「y」
2 => 「z」
评论
我可以通过 EVAL 正则表达式匹配(也可以在 REPL 中执行)的方式来实现,但这种方式不太吸引人。
> use MONKEY; EVAL "'xaybz' ~~ rx/$rx/";
「xaybz」
0 => 「x」
1 => 「y」
2 => 「z」
所以虽然这给了我一个解决方案,但我相信我错过了一个字符串插值的技巧,可以避免依赖于 EVAL
。
「 」
。如果我使用$/.Str
将匹配项字符串化,那么这些引号就会消失。因此,我的获取「xaybz」
不能归因于“字符串化”,因为它仍然是一个匹配对象。问题似乎在于我的初始尝试中忽略了捕获括号,我不知道为什么。 - grobber<$rx>
是一个Match,而你正在将其与一个Match匹配,这个Match被字符串化了... - jjmerelo