私は最近、Javaの正規表現エンジンに関係するいくつかの奇妙な動作に出くわしました。Javaの正規表現ダークコーナー... charsの順序は正規表現の意味を変えますか?
は、いくつかの検証を書くとき、私はそうのように、私の正規表現に角括弧を追加する必要:
"[^a-zA-Z0-9_/[email protected] ]" // original expression
"[^a-zA-Z0-9_/[email protected] /]/[]" // first modificiation
しかし...この実装に失敗しました。実験の後、私はスペースをchar
の最後まで移動すると動作することを発見しました。 hereがリストされているよう
"[^a-zA-Z0-9_/[email protected]/]/[ ]" // final working modification
は今、この表現を使用し、呼び出し元のコードは、String.replaceAll(String, String)
方法を使用していました。
私の質問は...誰もこの空間の配置がこの正規表現の意味を変える理由について、良い技術的考えを持っていますか?本当に問題ではありません。
[編集済み] コメントと回答 - 組み込みのStringメソッドを使用すると、誤った動作が発生することがあります。私のランタイム環境では、String.replaceAll(String, String)
のドキュメントを読むと、それは明らかにそれがPattern.compile(regex).matcher(str).replaceAll(repl)
と同じ機能であると書かれていますが、私はバグを報告します。
** **それが失敗しましたか?私は['PatternSyntaxException'](http://download.oracle.com/javase/7/docs/api/java/util/regex/PatternSyntaxException.html)を取得したと思います。 –
'/]/['を書くと、文字クラスに大括弧を入れたいですか?そうであれば、間違ったエスケープ文字のために失敗し、2番目のエスケープ文字が作成されました。 – stema
コンパイルエラーはありませんでした。括弧を正しくキャッチしないと失敗しました。私はそれ以来、私の誤った構文を修正しました。ありがとう! – avgvstvs