gpt4 book ai didi

regex - Perl 6 正则表达式未终止

转载 作者:行者123 更新时间:2023-12-04 17:06:59 25 4
gpt4 key购买 nike

我有一个 Perl 6 代码,我正在执行以下操作:

if ($line ~~ /^\s*#/) { print "matches\n"; }

我收到此错误:
===SORRY!===
Regex not terminated.
at line 2
------> <BOL>�<EOL>
Unable to parse regex; couldn't find final '/'
at line 2
------> <BOL>�<EOL>
expecting any of:
infix stopper

这是 Perl 5 代码的一部分:
if ($line =~ /^\s*#/)

它曾经可以很好地识别具有可选空格和 # 的行。 .

是什么导致 Perl 6 中出现此错误?

最佳答案

在 Perl 6 中,一切都来自孤独 #到行尾被视为注释,即使在正则表达式中也是如此。

为避免这种情况,请将其放在引号内使其成为字符串文字:

if $line ~~ / ^ \s* '#' / { say "matches"; }

(用 \ 转义也应该有效,但是 Rakudo seems to have a parsing bug 使得它在前面有空格时不起作用。
无论如何,引用此处显示的字符是推荐的方式——Perl 6 特别在正则表达式中引入了引用字符串,并在默认情况下使空格无关紧要,以避免许多 Perl 5 正则表达式遭受的反斜杠困惑。)

更一般地,所有非字母数字字符都需要在 Perl 6 正则表达式中引用或转义,以便按字面意思匹配它们。
这是 Perl 5 的另一个故意的非向后兼容的变化,这有点复杂。
在 Perl 6 中有一个简单的规则:
  • 字母数字 --> 仅在未转义时才按字面意思匹配。
    (转义时,它们要么具有特殊含义,例如 \s 等,要么被禁止。)
  • 非字母数字 --> 仅在转义时才匹配。
    (未转义时,它们要么具有特殊含义,例如 .+# 等,要么被禁止。)


  • 1 'Lone' 表示不是更大标记的一部分,例如带引号的字符串或 embedded comment 的开头部分.

    关于regex - Perl 6 正则表达式未终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023570/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com