• ベストアンサー

Javaの正規表現

Javaのプログラムで文字列に含まれるスラッシュを 全てバックシュラッシュに置換したくてreplaceAllを使用しています。 しかし、正規表現がよく分からず、エラーとなります。 どう記述すれば良いでしょうか? string.replaceAll("\\/", "\\"); ではエラーとなり、第二引数を\や\\\としてもダメでした。

  • Java
  • 回答数4
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

知らずに寝ぼけて#2書いてたけど,その回答で間違いないらしい(汗 http://java.sun.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29 http://oshiete1.goo.ne.jp/qa928785.html #3 >#2 補足 俺の環境(1.7.0-b43)では再現しない。 上記Q928785が1.7.0やベータを使っているようには思えないので 多分正式な仕様 Javaのライブラリ何でこんな実装しているんだろ? ============================================== 参考: C# → String.Replaceはどちらも正規表現ではなし。 str = "/a/"; str = str.replace("/","\\"); System.Console.WriteLine(str); // \\a\\ class Program { public static void Main(string[] args) { string s = "/a/"; System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex("/"); System.Console.WriteLine(r.Replace(s,"\\")); System.Console.ReadKey(true); } } → \a\ つまり第二引数で\はエスケープシーケンスとしてみなされない

その他の回答 (3)

回答No.3

今朝から回答ぼけっぱなし(俺が間違えてばっかり…) と思ったけど,ちゃんと生成されたソースみたら回答の通りだったな。 少し調べてみる。JDK 1.7系のバグかもしれない

回答No.2

class fuga{ public static void main(String[] args){ String str = "/a/"; /* 第一引数が\\/でも誤りではないが,普通は冗長なのでやらない。むしろ第二引数が問題。 */ str = str.replaceAll("/", "\\\\"); System.out.println(str); } }

vertig0
質問者

補足

第二引数を"\\\\"としたら、置換後は\\となってしまします。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

ん? >("\\/", "\\") この第一引数、エンマーク2つで正しい?(投稿ミスじゃなく? もしそうならこれはエスケープされた文字列としては"\/"を指定してるって事になるけど?

vertig0
質問者

補足

エンマーク2つです。 正規表現では記号の前には\\というように二つ必要だと 見たことがありましたので。

関連するQ&A

  • 空白文字の正規表現

    お世話になります。 StringクラスのreplaceAllを使用して、文字列に含まれる空白を削除しようとしているのですが、空白文字の正規表現がおかしいらしく「エスケープ・シーケンスが無効です」とエラー文が表示されてしまいます。 空白文字の正規表現は「\s(バックスラッシュs)」でよろしかったでしょうか? 使用しているjreは1.6.0でした。 ご回答お願いいたします。

    • ベストアンサー
    • Java
  • 正規表現で少し複雑な置換がしたい

    Javaというよりも、正規表現について質問です。 (一応、言語はJavaで、String#replaceAllを使います) 以下のルールで与えられた文字列の置換を行う正規表現を考えていますが、なかなかうまくいきません。 1.正規表現で \w+:: にマッチする文字列を削除する。 2.ただし、'' (シングルクォーテーション)で囲われている文字列は   1.の対象としない 3.ただし、\' (シングルクォーテーションの前に\があった場合は)   シングルクォーテーションと認識しない。 例: 置換前  A * B \'' CCC.DD::EEE' FFF.GGG::HH ' III' 置換後  A * B \'' CCC.DD::EEE' FFF.HH 'III' 色々試してみたのですが、どうしてもうまくいきません。 正規表現が得意な方、教えていただけますでしょうか・・?

    • ベストアンサー
    • Java
  • javaの正規表現について質問です。

    javaの正規表現matchesに関して質問です。 正規表現を用いて文字列が半角数字のみで出来ているかどうかを判定したいと思っています。 調べたとろこ下記の正規表現で判定できそうなのですが、 正規表現のルールが理解できず困っています。 ------------------------------------------- String aaa = "0123456789"; //パターン1 aaa.matches("^[0-9]{10,11}$"); //パターン2 aaa.matches("^[0-9]+$") ------------------------------------------- パターン1 ^[0-9]   →  文字列の先頭が0~9か判定 {10,11}   →  10~11回繰り返す(繰り返すというのは[0-9]かどうかということでしょうか?)           12文字目に文字を入れた下記文字列でもfalseが返ってきました。           解釈が間違えている?           String aaa = "0123456789a"; $      →  文字列の最後が[0-9]を10~11回繰り返しているかどうか? パターン2 ^[0-9]   →  文字列の先頭が0~9か判定 +$ →  文字列の最後が???? すいません自分で書いてて混乱してきました。 どなたかアドバイス下さい。

    • ベストアンサー
    • Java
  • replaceAllの使い方

    replaceAll(String regex, String replacement) 指定された正規表現に一致する、この文字列の各部分文字列に対し、指定された置換を実行します。 ということなので、 String str = "あ00a123"; String str2 = str.replaceAll("[^0-9]",""); で、str2は "00123" となると思ったのですが、実際はなりませんでした。 だめもとで思いつく限りの書き方を試してみたのですが、([]をとってみたり、replaceAll("あ","A")としてみたり…結局何の置換もできませんでした。 replaceAllの使い方教えていただきたいです。

    • ベストアンサー
    • Java
  • Javaの全角スペースの正規表現

    今、Javaのプログラムをしてるんですが、正規表現で全角スペースをどう表現したらいいのでしょうか? 下記のプログラムを実行して、スペースを埋めて「あいう」と出したいです。 Pattern.compile("正規表現").matcher(" あ い う ").replaceAll(""); 正規表現の\sとか、trim()メソッドを使用するなどだと、半角スペースしか削除することができなかったです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 正規表現を使用しない置換方法で giオプション

    正規表現を使用せず文字列を置換したいと思っています。 (文字列.replaceはOKだが引数で正規表現は使用せず、単純置換のみ) その際、以下を満たす置換方法はありますか? 1.大文字小文字区別せず 2.検出した箇所すべて 例えば 文字列.split("検出文字列").join("置換文字列") のような方法であれば、2は満たせますが、1が満たせません。 ご回答お待ちしております。

  • 正規表現の表現パターンについて教えて下さい。

    こんばんわ、正規表現を使ってある文字列を検索するプログラムを勉強していたのですが、 eregi('(http://|https://)[a-z0-9./_\-]+',第二引数、第三引数) となっていたのですが、第一引数の最後の + の部分はどうゆう意味があるのでしょうか? 僕の理解では[ ]の間が検索する正規表現のパターンだと思っているのですが、、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現について

    例えば sample( 34 ,12 );みたいな関数があって、それを丸ごと置換ダイアログで消したいのですが、 (引数は任意で、間にスペースがあったりなかったりする) 正規表現の使い方がいまいちよく判りません。 検索文字列を ”sample(":z,:z");” <-全然自信無し。 としてもやっぱりヒットしませんでした。 どうすればよいか教えてください。 正規表現のチェックボックスはオンにしてあります。

  • Javaによる正規表現について

    Javaでの正規表現で、ある文字だけを削除したい場合はどのようにすればいいのでしょうか。 例えば"This is a pen"の"is"を削除して、"This a pen"にしたい場合 String s = new String("This is a pen"); s.replace(s.substring(5,7), ""); このようにして置換でやってみたのですが、"is"だけを削除したいのですが、"This"にある"is"も一緒に削除されて"Th a pen"という結果になってしまいます。 どのようにすれば、特定の文字を削除することができるのでしょうか。 教えて下さい。

  • 正規表現のタイプがわからない(初心者)

    正規表現で置換ができることを知り、こういうサイトを見つけました。 @IT:Windows TIPS -- Tips:複数ファイルの文字列置換をワンクリックで行なう http://www.atmarkit.co.jp/fwin2k/win2ktips/308strrpl/strrpl.html そこでreplace.wsfを作りましたが、正規表現がうまくいきません。 replace.wsfは正規表現を使う場合は "/ /g" で囲うらしいのですが urlのようなスラッシュ / が多いものを円記号 \ でエスケープしましたがうまくいきません。 さらに http://msdn.microsoft.com/ja-jp/library/aa293063(VS.71).aspx というサイトで任意の文字をドット . で置換したいんですができません。 以下書いたものを載せます 文字はアンダーバー _ で書いています strRepl="/http:[\/][\/]______.____.jp[\/]____/____[\/][0-9][0-9][0-9][0-9][\/][0-9][0-9][\/][0-9][0-9]/g"; /* 置換対象文字列 */ [\/]はかっこなしでも試しましたができませんでした [0-9]の部分は年月日が入ります。 replace.wsfで正規表現を実現させることができません。 正しい方法を教えてください!!

専門家に質問してみよう