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

如何将变量插入Perl 6正则表达式?

陶胤运
2023-03-14

大纲05提到Perl6没有将变量插入正则表达式中,但是可以将外部变量与模式相关联。据我所知,文档中没有提到这个功能。我认为人们还是会希望以某种方式从一个字符串建立一个模式,所以我很好奇这将如何工作。

这里有一个程序演示了现在发生的事情。我不知道这是应该发生的还是有人想要的。我在模式中插入一个变量。如果用查看$r。perl,您将看到变量名。然后,我应用模式,它匹配。我更改变量的值。现在模式不匹配。将其更改为其他可行的选项,然后再次匹配:

my $target = 'abcdef';

my $n = 'abc';
my $r = rx/ ( <$n> ) /;

# the smart match like this doesn't return a Match object
# https://rt.perl.org/Ticket/Display.html?id=126969
put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

# now, change $n. The same $r won't match.
$n = 'xyz';

put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

# now, change back $n. The same $r does match.
$n = 'ab';
put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

如果那是它应该做的,好吧。文档在这里很轻,测试(事实上的规范)对于像这样的远程行为来说并不复杂。

我可以做额外的工作来关闭一个副本(根据$n中的内容,可能比我显示的工作量更多),这让我感到不舒服:

my $r = do {
    my $m = $n;
    rx/ <$m> /;
    };

但是,我仍然希望有一种方法来“确定”一个模式(哦,我的上帝,我只是要求/o回来)。Regex中的一个方法。我想人们会寻找这个功能。

my $r = rx/ .... /.finalize;  # I wish!

或者,Perl6有一个更好的方法来做这类事情,我只是充满了老式的思维。Perl 6有规则而不是正则表达式。实际上,这一切背后都有一个解析器。我认为定义标记规则可能是一种方法,但我认为我遇到了同样的问题。我看不出有什么子规则工厂

还有别的办法吗?

共有1个答案

熊朝
2023-03-14

作为使用闭包的替代方法,您当然可以通过EVAL构建正则表达式。

除了这两个可以说是低劣的解决方案之外,我也画了一张空白。请注意,您可以通过

/ <{ BEGIN compute-string-once-at-compile-time }> /

但我不知道如何用它来解决这个问题。。。

 类似资料:
  • 问题内容: 因此,例如: 但这当然是行不通的:)有什么办法可以做到这一点? 问题答案: 更新资料 根据一些评论,请务必注意,如果可能存在恶意内容(例如,变量来自用户输入),则可能需要转义该 变量 ES6更新 在2019年,这通常使用模板字符串编写,并且上面的代码已更新。最初的答案是:

  • 问题内容: 我有这样的查找声明 它给出了答案。但是我需要某个变量值,而不是那个杂乱的值MT。如何实现呢?谢谢。 更新 我试过像“ /。 ” + searchterm +“ ./ ”无效。 问题答案: 除了使用内联语法创建正则表达式外,还可以使用RegExp对象基于字符串创建一个正则表达式

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

  • 问题内容: 我想在内部使用,该怎么办Python? 问题答案: 从python 3.6开始,你还可以使用文字字符串插值。在你的特定情况下,解决方案是:

  • 问题内容: 我想在JavaScript中创建一个方法,并且我认为使用正则表达式是最简洁的方法。但是,我不知道如何将变量传递给正则表达式。我能做到这一点已经将取代所有的实例有。 但是我想做这样的事情: 但是显然这只会替换文本…所以如何将这个变量传递给我的正则表达式字符串? 问题答案: 代替使用语法,可以构造一个新的RegExp对象: 您可以通过这种方式动态创建正则表达式对象。然后,您将执行以下操作:

  • 问题内容: 我目前正在将Web应用程序代码从PHP移植到JS。 我对此正则表达式有疑问。从PHP 这样使用 如何将其转换为在JS上工作? 先感谢您 问题答案: 没什么特别的。PHP regex语法与JavaScript中的语法非常相似: 您可以从 MDN的 本手册中找到有关JavaScript 中正 则表达式的更多信息:https : //developer.mozilla.org/en- US/