このパターンがコンパイルに失敗する理由:
Pattern.compile("(?x)[ ]\\b");
エラー
ERROR java.util.regex.PatternSyntaxException:
Illegal/unsupported escape sequence near index 8
(?x)[ ]\b
^
at java_util_regex_Pattern$compile.call (Unknown Source)
次の同等のものは機能しますか?
Pattern.compile("(?x)\\ \\b");
Pattern.compile("[ ]\\b");
Pattern.compile(" \\b");
これは Java 正規表現コンパイラのバグですか、それとも何か不足していますか? [ ]
バックスラッシュ-バックスラッシュ-スペースの代わりに冗長な正規表現で使用するのが好きです。視覚的なノイズを節約できるからです。しかし、明らかにそれらは同じではありません!
PS: この問題はバックスラッシュに関するものではありません。[ ]
バックスラッシュを使用する代わりに、単一のスペースを含む文字クラスを使用して、冗長な正規表現でスペースをエスケープすることです。
どういうわけか、冗長な正規表現(?x)
と単一のスペースを含む文字クラスの組み合わせにより[ ]
、コンパイラがオフになり、単語の境界エスケープが認識されなくなります\b
1.8.0_151 までの Java でテスト済み