\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不支持。
答案 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
的变量的一部分。