如何在PetitParserDart中的正则表达式中匹配`\ b`?

时间:2013-07-02 14:21:00

标签: dart petitparser

\b是正则表达式中的“世界边界”,如何在PetitParserDart中匹配它?

我试过了:

pattern("\b") & word().plus() & pattern("\b")

但它与任何东西都不匹配。我想要的上面的模式是\b\w+\b正则表达式。


我真正的问题是:

我想将render视为一个标记,只要它是一个独立的单词。

以下是真的:

render
to render the page
render()
@render[it]

以下不是:

rerender
rendering
render123

我不能在这里使用string("render").trim(),因为它会占用周围的空间。所以我想要\b,但似乎PetitParserDart不支持。

1 个答案:

答案 0 :(得分:2)

pattern返回的解析器只查看单个字符。有些例子,请查看tests

正则表达式\b\w+\b的第一个近似值是:

word().neg() & word().plus() & word().not()

但是,这需要在解析后的字符串的开头添加非单词字符。您可以通过删除word().neg()并确保调用者在有效位置启动来避免此问题。

使用解析表达式语法时,您描述的问题很常见。您通常可以通过相应地重新排序选项或使用and()not()等逻辑谓词来解决此问题。例如,Smalltalk grammar定义了令牌true,如下所示:

def('trueToken', _token('true') & word().not());

这可以避免令牌解析器意外地使用名为trueblood的变量的一部分。