2011年5月24日火曜日

エスケープシーケンスとStringのreplaceAllと、時々正規表現

以下のような動きになるらしい・・・
NG⇒replaceAll("\\","/")
OK⇒replaceAll("\\\\","/")

http://www.javaroad.jp/bbs/answer.jsp?q_id=20071227154908697


※replaceAllのリファレンス
public String replaceAll(String regex,
String replacement)

パラメータ:
regex - この文字列との一致を判定する正規表現
replacement - 一致するものそれぞれに置き換えられる文字列

置換文字列内でバックスラッシュ (\) とドル記号 ($) を使用すると、それをリテラル置換文字列として処理した場合とは結果が異なる場合があります。Matcher.replaceAll を参照してください。必要に応じて、Matcher.quoteReplacement(java.lang.String) を使用して、これらの文字に特別な意味を持たせないようにしてください。
http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/String.html#replaceAll(java.lang.String, java.lang.String)


Matcher.replaceAllの記載
正規表現 a*b、入力 "aabfooaabfooabfoob"、および置換文字列 "-" を指定した場合、その表現の正規表現エンジン上でこのメソッドを呼び出すと、文字列 "-foo-foo-foo-" が生成されます。
このメソッドを呼び出すと、この正規表現エンジンの状態が変わります。この正規表現エンジンを後続のマッチ操作で使用する場合は、最初に正規表現エンジンをリセットする必要があります。
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/regex/Matcher.html#replaceAll(java.lang.String)

よくわからん…

0 件のコメント:

コメントを投稿