如何在 PetitParser 中使用但不捕获一些字符?

Fre*_*ind 5 parsing dart petitparser

我定义了一个规则:

def("invokation", char('@').word().plus().flatten());
Run Code Online (Sandbox Code Playgroud)

对于“@who”,它将匹配并得到@who结果。

怎么问它只返回who而不带@

Luk*_*gli 5

不确定您的问题是关于 PetitParser for Java还是Dart

无论如何,您都需要将char('@')和连接word().plus().flatten()到一个序列。然后,您选择列表结果列表的第二个元素,忽略第一个字符。

在 Java 中,这看起来像这样:

def("invokation", character('@')
    .seq(word().plus().flatten())
    .map(Functions.nthOfList(1));
Run Code Online (Sandbox Code Playgroud)

在 Dart 中是:

def("invokation", char('@')
    .seq(word().plus().flatten())
    .pick(1));
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我刚刚对 Java 版 PetitParser 进行了改进,以便您pick(int)也可以在 Java 中使用。