如何在PetitParserDart中创建一个解析器,这意味着任何不在['(',')','{','}']中的char?

时间:2013-07-01 16:32:37

标签: dart petitparser

我想定义一个解析器,它接受PetitParserDart中除['(', ')', '{', '}']之外的任何字符。

我试过了:

char('(').not() & char(')').not() & char('{').not() & char('}')

我不确定它是否正确,是否有任何简单的方法可以做到这一点? (像chars('(){}').neg())?

1 个答案:

答案 0 :(得分:3)

这匹配任何内容,但是在插入符^之后列出的字符。它是所有字符的字符类,没有列出的字符:

pattern('^(){}');

这也有效(请注意最后一个字符的.not(),以及实际使用该字符的any()):

char('(').not() & char(')').not() & char('{').not() & char('}').not() & any()

这个也适用:

anyIn('(){}').neg()

相当于:

(anyIn('(){}').not() & any()).pick(1)

另一种选择是:

(char('(') | char(')') | char('{') | char('}')).neg()

除了第二个例子,所有示例都返回解析后的字符(这可以很容易修复,但我想保持接近你的问题)。第一个例子可能是最容易理解的,但根据上下文,您可能更喜欢其中一种选择。