Perl 6 正则表达式未终止
Perl 6 regex not terminated
我有一个 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*#/)
它过去可以很好地识别具有可选 space 和 #
的行。
在 Perl 6 中导致此错误的原因是什么?
散列 #
在 Perl 6 正则表达式中用作注释标记。
添加一个反斜杠\
像这样转义
if ( $line =~ /^\s*\#/ )
在 Perl 6 中,从单独的 1 #
到行尾的所有内容都被视为注释,即使在正则表达式中也是如此。
为避免这种情况,将其放在引号内使其成为字符串文字:
if $line ~~ / ^ \s* '#' / { say "matches"; }
(使用 \
转义也应该有效,但是 Rakudo seems to have a parsing bug 使得它在前面有 space 时无效。
无论如何,引用此处所示的字符是推荐的方式——Perl 6 特别在正则表达式中引入了引号字符串,并在默认情况下使 spaces 变得无关紧要,以避免许多 Perl 5 正则表达式遭受的反斜杠混乱。)
更一般地说,所有 非字母数字字符需要在 Perl 6 正则表达式中被引用或转义,以便按字面匹配它们。
这是 Perl 5 的另一个有意的非向后兼容更改,在 Perl 5 中这有点复杂。
在 Perl 6 中有一个简单的规则:
字母数字 --> 仅在 未 转义时按字面匹配。
(转义时要么有特殊含义,如\s
等,要么被禁止。)
非字母数字 --> 仅在转义时按字面匹配。
(不转义时,要么有特殊含义,如.
、+
、#
等,要么是禁止的。)
1 'Lone' 表示不属于更大标记的一部分,例如带引号的字符串或 embedded comment 的开场符。
我有一个 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*#/)
它过去可以很好地识别具有可选 space 和 #
的行。
在 Perl 6 中导致此错误的原因是什么?
散列 #
在 Perl 6 正则表达式中用作注释标记。
添加一个反斜杠\
像这样转义
if ( $line =~ /^\s*\#/ )
在 Perl 6 中,从单独的 1 #
到行尾的所有内容都被视为注释,即使在正则表达式中也是如此。
为避免这种情况,将其放在引号内使其成为字符串文字:
if $line ~~ / ^ \s* '#' / { say "matches"; }
(使用 \
转义也应该有效,但是 Rakudo seems to have a parsing bug 使得它在前面有 space 时无效。
无论如何,引用此处所示的字符是推荐的方式——Perl 6 特别在正则表达式中引入了引号字符串,并在默认情况下使 spaces 变得无关紧要,以避免许多 Perl 5 正则表达式遭受的反斜杠混乱。)
更一般地说,所有 非字母数字字符需要在 Perl 6 正则表达式中被引用或转义,以便按字面匹配它们。
这是 Perl 5 的另一个有意的非向后兼容更改,在 Perl 5 中这有点复杂。
在 Perl 6 中有一个简单的规则:
字母数字 --> 仅在 未 转义时按字面匹配。
(转义时要么有特殊含义,如\s
等,要么被禁止。)非字母数字 --> 仅在转义时按字面匹配。
(不转义时,要么有特殊含义,如.
、+
、#
等,要么是禁止的。)
1 'Lone' 表示不属于更大标记的一部分,例如带引号的字符串或 embedded comment 的开场符。