在语法中§
有关方法 parse的详细信息,请参阅主要文档 在上下文中
method parse(, : = 'TOP', Capture() : = \(), Mu : = Mu, *)
使用 $rule
作为起始规则解析 $target
,如果它不是 Str
,则将其强制转换为 Str
。如果提供了其他 $args
,则会将其传递给起始规则。
say RepeatChar.parse('aaaaaa', :rule('start'), :args(\('a')));say RepeatChar.parse('bbbbbb', :rule('start'), :args(\('b')));# OUTPUT:# 「aaaaaa」# 「bbbbbb」
如果提供了名为 actions
的参数,则将其用作动作对象,也就是说,对于每个成功的正则表达式匹配,如果存在同名方法,则使用匹配对象作为唯一的位置参数在动作对象上调用该方法。
my = class ;grammar .parse('ab', :);# OUTPUT: «427»
其他命名参数用作匹配选项,因此你可以指定诸如 :pos(4)
之类的内容以从第五个(:pos 为零基)字符开始解析。允许所有 匹配副词,但并非所有副词都会生效。正则表达式可以有几种类型的副词,其中一些在编译时应用,例如 :s
和 :i
。你无法将它们传递给 .parse
,因为正则表达式已经编译过了。但是,你可以传递那些影响运行时行为的副词,例如 :pos
和 :continue
。
say RepeatChar.parse('bbbbbb', :rule('start'), :args(\('b')), :pos(4)).Str;# OUTPUT: «bb»
方法 parse
仅在匹配结束后光标到达目标字符串末尾时才成功。如果你想在中间停止,请使用 方法 subparse。
语法中的顶级正则表达式将被允许回溯。
成功时返回 Match
,失败时返回 Nil
。