Scalaパーサーコンビネータとの一致を反転することはできますか?私はではないパーサーと行を一致させようとしています。は一連のキーワードで始まります。私は迷惑なゼロ幅の先読み正規表現(例えば"(?!h1|h2).*"
)でこれを行うことができますが、私はむしろScalaパーサでそれをやります。私が思い付くことができました最高のはこれです:Scala parser-combinators:一致を逆転する方法は?
def keyword = "h1." | "h2."
def alwaysfails = "(?=a)b".r
def linenotstartingwithkeyword = keyword ~! alwaysfails | ".*".r
アイデアは、私が使用することをここにある〜!すべて一致するregexpへのバックトラッキングを禁止し、何も一致しない正規表現 "(?= a)b" .rを続行します。 (ところで、あらかじめ定義されたパーサーは常に失敗しますか?)そうすることで、キーワードが見つかった場合には行は一致しませんが、キーワードが一致しない場合は一致します。
これを行うより良い方法があるのだろうかと思います。ある?