私のjava @windowsは次のとおりです。java negative lookbehind正規表現のバグ?
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)
コード
Pattern.compile(".+(?<!(xxx|idea|perforator|pycharm|s).*)").matcher("xxx").matches() //returns TRUE while it should return FALSE
Pattern.compile(".+(?<!(xxx|idea|perforator|pycharm|s).*)").matcher("perforator").matches() //returns FALSE
文字列が8つの文字より小さい場合、負の後読みが失敗したように見えます。
これはバグですか、正規表現について誤解していますか?
何をしますか? lookbehindが成功するまで最初の '。+'はバックトラックしますので、両方の行が一致するはずです。 – Qtax
@Qtax Javaマッチャーの永遠に疑問を引き起こす 'matches()'メソッドは、式が入力文字列全体をマッチとして取得する場合にのみ成功します。 – Affe