正则表达式单词边界: <|wb> v. <?wb>

7st*_*tud 2 raku

编辑:@ikegami 是第一个回应并指出我的错字的人。

\n

raku正则表达式文档说:

\n
\n

要匹配任何单词边界,请使用 <|w> 或 <?wb>。这类似于其他语言中的 \\b。

\n
\n

这是我在 rakudo 中看到的:

\n
[309] > "apa pz" ~~ / <|wb> p. /\n\xef\xbd\xa2pa\xef\xbd\xa3\n\n[310] > "apa pz" ~~ / <?wb> p. /\n\xef\xbd\xa2pz\xef\xbd\xa3\n
Run Code Online (Sandbox Code Playgroud)\n

<?wb>行为符合我的预期。在<|wb>做什么?

\n

在 Perl 中:

\n
"apa pz" =~ / \\b p. /xms;  \nsay $&;   # pz\n
Run Code Online (Sandbox Code Playgroud)\n

cod*_*ons 6

<?wb>做你想做的事。<|wb><|w>IIUC 都是不受支持的语法,应该引发错误。事实上,它们都使用即将发布的 Raku AST 编译器前端:

$ RAKUDO_RAKUAST=1 raku -e 'say "apa pz" ~~ / <|w> p. /'
> ===SORRY!===
> Cannot find method 'apply-sink' on object of type NQPMu
Run Code Online (Sandbox Code Playgroud)

<|更正式地说, Roast(Raku 的测试套件/规范)中没有指定以 开头的正则表达式语法。

(当然,这意味着文档引用<|w>语法是错误的;我提交了带有修复的 PR)。