是否可以使用 Scala 解析器组合器反转匹配?我正在尝试使用不以一组关键字开头的解析器匹配行。我可以使用烦人的零宽度负前瞻正则表达式(例如"(?!h1|h2).*"
)来做到这一点,但我宁愿使用 Scala 解析器来做到这一点。我能想到的最好的是:
def keyword = "h1." | "h2."
def alwaysfails = "(?=a)b".r
def linenotstartingwithkeyword = keyword ~! alwaysfails | ".*".r
这个想法是我用的~!禁止回溯到所有匹配的正则表达式,然后继续使用不匹配的正则表达式 "(?=a)b".r。(顺便说一句,是否有一个总是失败的预定义解析器?)这样,如果找到关键字,则不会匹配该行,但如果关键字不匹配,则会匹配该行。
我想知道是否有更好的方法来做到这一点。有没有?