当我试图用pest.rs语法定义一个“标识符”时,我遇到了一个问题,其中一个标识符不是在一组保留关键字中的字符串。
我想使用一个任意的匹配规则(比方说它的ASCII_ALPHA_LOWER+),这样就可以一个接一个地使用任意数目的小写字母,但是我希望只有当结果是而不是等于一个特定的字符串(例如,"abc")时,规则才能匹配。
在regex中,这可以通过使用负查找和锚字符( ^(?!abc$)[a-z]+ )相结合来实现--因为锚点在与abc匹配时就停止了负查找,这意味着像abcd 这样的字符串将被匹配。
但是,pest没有这些锚字符,可以达到的最佳效果如下:
identifier {
!("abc") ~ ASCII_ALPHA_LOWER+
}但是,由于没有锚字符,任何以abc开头的字符串都将被匹配,而不管其馀字符如何,这不是最优的,因为我只希望规则在与保留关键字完全匹配的情况下失败。
有谁知道我怎样才能实现与使用pest语法的正则表达式相同的功能?
发布于 2022-06-09 00:17:33
使用一个可选的修饰符,而不是消极的展望:
ident = { "abc"? ~ ASCII_ALPHA_LOWER+}这要求,如果标识符以关键字开头,则必须在其后面有一些内容。
https://stackoverflow.com/questions/72550588
复制相似问题