2

\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 似乎不支持它。

4

1 回答 1

2

返回的解析器pattern只查看单个字符。查看一些示例的测试

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

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

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

您描述的问题在使用解析表达式语法时很常见。您通常可以通过相应地重新排序选择或使用逻辑谓词(如and()and )来解决它not()。例如,Smalltalk 语法将标记定义true如下:

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

这避免了令牌解析器意外消耗了一个名为 的变量的一部分trueblood

于 2013-07-03T13:53:15.833 回答