在语法中§
请参阅 上下文中的主要文档 了解命名正则表达式
语法的核心成分是命名的 正则表达式。虽然 Raku 正则表达式 的语法超出了本文档的范围,但命名正则表达式具有特殊的语法,类似于子例程定义:[1]
my
在这种情况下,我们必须使用 my
关键字指定正则表达式是词法作用域的,因为命名正则表达式通常在语法中使用。
命名使我们能够轻松地在其他地方重新使用正则表达式
say so "32.51" ~~ ; # OUTPUT: «True»say so "15 + 4.5" ~~ /\s* '+' \s*/ # OUTPUT: «True»
regex
并不是命名正则表达式的唯一声明符。事实上,它是最不常用的。大多数情况下,使用 token
或 rule
声明符。这两个都是棘轮,这意味着如果匹配失败,匹配引擎不会备份并重试。这通常会执行您想要的操作,但并不适用于所有情况
mymymy = 'Tokens won\'t backtrack, which makes them fail quicker!';say so ~~ ; # OUTPUT: «True»say so ~~ ; # OUTPUT: «False»# the entire string is taken by the .+
请注意,非回溯适用于术语,即,如下面的示例所示,如果您匹配了某项内容,则永远不会回溯。但是,当您匹配失败时,如果 |
或 ||
引入了另一个候选项,您将重试以再次匹配。
my ;my ;say so "bd" ~~ ; # OUTPUT: «False»say so "bd" ~~ ; # OUTPUT: «True»