当前位置: 首页 > 知识库问答 >
问题:

在Perl 6中使用循环组合正则表达式

陆绪
2023-03-14

这里,我从数组的元素手动生成一个正则表达式。

perl6 prettyprint-override">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」)

如何使用@reg{...}的做到这一点?


共有2个答案

孔梓
2023-03-14
my @reg =
  /foo/,
  /bar/,
  /baz/,
  /pun/
  ;

my $i = 0;

my $reg = @reg
  .map({ $_ = .perl; $_.substr(1, $_.chars - 2); })
  .map({ "{$i++}{$_}" })
  .join('|');

my @match = "foo", "0foo_1barz" ~~ m:g/(<{$reg}>) /;

say @match[1][0].Str;
say @match[1][1].Str;

# 0foo
# 2baz

查看文档

编辑:亲自阅读文档。已将隐式评估更改为$()构造。

编辑:重写了一些实际有效的答案

编辑:将答案更改为可怕的黑客攻击

周育
2023-03-14

如果一个变量包含一个正则表达式,您可以在另一个正则表达式中使用它。

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

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;
 类似资料:
  • 我有3个正则表达式,但当模式匹配时执行相同的操作,所以我考虑将所有三个表达式合并为一个。我尝试了很多,但无法让“|”I.e”或“在我的正则表达式中工作 regex1:<代码>文本。替换(/([\u00A9-\u3299])/g,函数myFunction(x){…} regex2: regex3: 我试过这样做,但它不起作用regex:

  • Perl6正则表达式匹配连接 它为False,因为连词中的“23”与$a中的“23”子字符串匹配,但此子字符串与连词中的“ef”不匹配。这有点违反直觉,因为它更容易解释$a ~~ m/23 如果我有n个正则表达式,我想看看是否所有这些n个正则表达式都匹配相同的整个字符串,而不是匹配整个字符串的相同子字符串部分,那么编写perl6表达式的最佳方法是什么? 在例子中,我真的想做 如果正则表达式的数量很

  • 问题内容: 我正在解析(种类)表格的名称: 通常有两个项(二项式),但有时有3个或更多。 我写 大部分时间都有效,但偶尔会陷入无限循环。花了一些时间来查找正则表达式匹配中的内容,然后我才意识到这是一个错字,我应该写 正确执行。 我的问题是: 为什么会发生这种循环? 有没有办法在运行程序之前检查类似的正则表达式错误?否则,可能很难在prgram分发之前就将它们捕获并引起问题。 [注意:我不需要物种的

  • 我不能组合下面两个正则表达式。密码标准要求: 密码不能包含超过两个连续字符的用户名或全名部分 密码长度必须至少为6个字符 密码必须包含下列三个类别中的字符 大写字母(英文A-Z) 小写字符(英文a-z) 基数10位(0-9) 非字母字符(例如!、@、#、$、%等)

  • 问题内容: 我有一个带有div的html页面,这些div的 ID 为 s1 , s2 等形式。 我想将CSS属性应用于这些部分/ div的子集(取决于id)。但是,每次添加 div时 ,都必须像这样分别为该部分添加css。 css中是否有类似正则表达式的内容,可用于将样式应用于一组 div 。 问题答案: 您可以设法选择那些元素而无需任何形式的正则表达式,如先前的答案所示,但是要直接回答问题,可以

  • 给定两个文本中的单词由空格和标点符号分隔。从第一个文本中删除第二个文本中包含的所有单词。请帮助我使用正则表达式