在这里,我从数组的regex元素手动制作了Regex


my Regex @reg =
  / foo /,
  / bar /,
  / baz /,
  / pun /
  ;

my $r0 = @reg[0];
my $r1 = @reg[1];

my Regex $r = / 0 $r0 | 1 $r1 /;

"0foo_1barz" ~~ m:g/<$r>/;
say $/;  # (「0foo」 「1bar」)


for @reg {...}怎么做?

最佳答案

如果一个变量包含一个正则表达式,则可以在另一个正则表达式中不费吹灰之力地使用它。

第二个技巧是在正则表达式中使用数组变量,这等效于数组元素的析取:

my @reg =
  /foo/,
  /bar/,
  /baz/,
  /pun/
  ;

my @transformed = @reg.kv.map(-> $i, $rx { rx/ $i $rx /});

my @match =  "0foo_1barz" ~~ m:g/ @transformed /;

.say for @match;

关于raku - 在Perl 6中使用循环合并正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47267671/

10-12 21:34