• ベストアンサー

PatternSyntaxException

こんにちは。 ある文字列の\マークを/に置き換えるために、 Pattern p = Pattern.compile("\\"); Matcher m = p.matcher("文字列"); String replaced = m.replaceAll("/"); としているのですが、 1行目でなぜかPatternSyntaxExceptionがスローされます。何かおかしいのでしょうか? ちなみにEclipseを用いてコーディングしています。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

Pattern p = Pattern.compile("\\\\"); としてください。 正規表現で\\を指定すると、バックスラッシュになりますが、このためには、\\(\2文字)が必要です。 ここで、Pattern.compile("\\"); は \1文字になりますので、期待した結果となりません。従って"\\\\"とすることにより、\\(\2文字)が作成され、期待した結果となります。

mikimiki777
質問者

お礼

ありがとうございました。 \\\\で無事できました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 正規表現の検索について

    正規表現のエスケープしなければいけない文字が文字列に含まれているかどうかをチェックしたいのですがうまくいきません。 今は、下記のようにしてnoと表示されます。 よろしくお願いします。 String str ="(1)test"; Pattern p; Matcher m; p = Pattern.compile("\\(1\\)"); m = p.matcher(str); if(m.matches()) { System.out.println("ok"); }else{ System.out.println("no"); }

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

    現在下記のように文字列をチェックする正規表現を作成したのですが、 「禁止文字を含まない」と表示されてしまいます。 どこが問題なのか、指摘していただければと思います。 よろしくお願いします ---------------------------------------------------- // チェックする文字列 String str = "abc\"; // 禁止文字 String regex = "\\/:;\\*?'\"<>\\|~\\\\" + "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨワヲンァィゥェォッャュョ゛゜ー、。「」・" + "(1)(2)(3)(4)(5)(6)(7)(8)(10)(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)" + "IIIIIIIVVVIVIIVIIIIXXiiiiiiivvviviiviiiixx" + "ミリキロセンチメートルグラムトンアールヘクタールリットルワットカロリードルセントパーセントミリバールページmmcmkmmgkgccm2" + "〝〟No.K.K.TEL(上)(中)(下)(左)(右)(株)(有)(代)明治大正昭和平成∮∑∟⊿"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); // if (m.find()){ out.println("禁止文字を含む"); }else{ out.println("禁止文字を含まない"); }

    • ベストアンサー
    • Java
  • 初めて投稿します。

    初めて投稿します。 JavaでHTMLソースコードからリンクタグ<a href="~~"></a>と文字列(テキスト)だけ取得したいのです(<a href="~~">から</a>タグの文字列を含む)。 Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL); Matcher matcher = pattern.matcher(<ソースコード>); とするとタグ全てが除去されてしまうので困っています。 Pattern.compileの引数に入れる正規表現を教えてください。 よろしくお願いいたします。

  • 本文から指定文字列の抽出

    本文msgにメールアドレス(複数ある場合あり)とその他の文字が含まれます。 ここからメールアドレスのみを抽出したく下記のようにしたのですが、うまくいきません。なぜでしょうか? よろしくお願い致します。 public static void showMessage(Message msg) throws Exception { Pattern p = Pattern.compile(" (^[a-zA-Z0-9_.-]+?@[A-Za-z0-9_.-]+$)", 32); Matcher m = p.matcher(msg.getContent() + ""); System.out.println(m.replaceAll("$1")); } (参考) http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html ※compile()中の「32」はDOTALL フラグです。本当は文字で指定したいのですが、指定の仕方がわからなく、仕方なくこうしています。 http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html#DOTALL

    • ベストアンサー
    • Java
  • substringで文字を分割

    全角80桁の文字列を全角空白を利用して4分割したいのですが 下記にご質問内容を記載します。 String str = new String(住所漢字); Matcher j = pattern2.matcher(住所漢字); Pattern pattern2 = Pattern.compile("^.{1,20} ");で 文字列の先頭から始まって半角空白で終わる最大21文字 (最後の全角空白を含む)にマッチさせた文字列に Matcher j = pattern2.matcher(住所漢字); while(j.find()) { 正規表現で抜き出した文字列の文字カウントをチェック int mojiLength = i.group().length(); String iNewString = tmp.substring(mojiLength); out.print(j.group()+","+iNewString); として、正規表現でマッチさせた文字列以降を substringで抜き出したのですが それ以降の文字列も同じようにして substringで抜き出した20文字以降の文字列に 先に設定した正規表現を利用して分割して カンマ区切の4分割にしたいのですが この先の方法が分からず色々調べている最中です。 すいませんがぜひアドバイスお願いします。

    • ベストアンサー
    • Java
  • CSVファイルを , で句切って出力する

    同じ質問になってしまってすみません。 困り度を2ではなく3にしたかったので再掲示してしまいました。 よろしくお願いいたします。 次のような課題が出たのですが教えていただきたく書き込みしました。 皆様のお力をお貸しください。 (1)適当なフォルダにファイルを用意する(ファイルにはCSV形式で文字列が書いてある) (2)最初に文字列をキーボードから入力させる(文字列は半角で5文字まで、それ以外ならば繰り返し入力させる) ※ 指定したファイルがない場合は堤外を出力(try,catch) (3)フォルダのファイル読み込み、(2)で入力した文字列が含まれているCSVのカラムをファイルに出力(ファイルは新規作成 public class Match { public boolean matchString (String[] args) { // マッチング対象の文字列です。 String str = "​http://iwamode.net/index.html";//​ Pattern p = Pattern.compile("^https?://"); // 正規表現のコンパイル Matcher m = p.matcher(str); // 正規表現エンジンの生成 if (m.find()) { // java.util.regex.Matcher#find()メソッドは部分一致するかを判断します。 System.out.println("「http://」または「https://」から始まる文字列です。"); } else { System.out.println("「http://」または「https://」から始まる文字列ではありません。"); } Pattern p2 = Pattern.compile("\\.com"); Matcher m2 = p2.matcher(str); if (m2.find()) { return true; } return false; } } ----------------------------------------------------------- try{ File csv = new File("Kadai10.csv"); // CSVデータファイル BufferedReader br = new BufferedReader(new FileReader(csv)); // 最終行まで読み込む while (br.ready()) { String line = br.readLine(); // 1行をデータの要素に分割 StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { // 1行の各要素を区切りで表示 System.out.println(st.nextToken() + ","); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { // Fileオブジェクト生成時の例外捕捉 e.printStackTrace(); } catch (IOException e) { // BufferedReaderオブジェクトのクローズ時の例外捕捉 e.printStackTrace(); } -------------------------------------------------------------- System.out.println("半角5文字までの文字列を入力してください"); BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); String str = r.readLine(); if(str.length() <= 5 && str.matches("[0-9a-zA-Z]")) { 上記の3つの部分ソースを使いプログラムを完成させたいんですがどのようにしたらいいでしょうか?

    • ベストアンサー
    • Java
  • Java正規表現-"ある文字列"を含まない文字列

    Javaの正規表現で、HTMLタグ以外の文字列を抽出しようとしています。 HTMLタグはの正規表現は"(</?.*>)"のように表しました。これの否定をしたいのですが、方法を教えて下さい。HTMLタグ以外にヒットさせたいです。 一応、現段階のソースを載せます。 import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLInnerGetter { public static void main(String[] args){ String regex = "(</?.*>)"; String target = "<html><head><title>title</title></head><body><h1>head1<br><p>pragraph</p></body></html>"; ArrayList<String> innerHTMLs = new ArrayList<String>(); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(target); while(matcher.find()){ innerHTMLs.add(matcher.group(1)); } System.out.println(innerHTMLs); } } 出力結果 [<html><head><title>title</title></head><body><h1>head1<br><p>pragraph</p></body></html>] ※否定できなかったので、HTMLタグがヒットしています。

    • ベストアンサー
    • Java
  • 日本語の正規化表現

    urizakaです J2SDK1.4から正規表現が標準についたと知り、さっそくカタカナエラーチェックのためのBeanを作ってみたのですが、どんな文字列(カタカナ、英語、ひらがな…etc)と比較させても「False」しか戻ってこないという状態で、うまく行きません。 /** *カタカナエラーチェック:カタカナは使われているかどうか? *@param s 調べる **/ public boolean checkKkana(String s){ Pattern pattern = Pattern.compile("[^アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨワヲン]"); Matcher matcher = pattern.matcher(s); boolean check = matcher.matches(); return check; } } もしかすると、日本語を処理するのには特別な方法が必要なのでしょうか? すみませんが、よろしくお願いします

    • ベストアンサー
    • Java
  • 1文字以上のアルファベットが入力されているかチェックするには

    正規表現で1文字以上のアルファベットが含まれているかを確認する事はできますか? 1234567890 → × a123456789 → ○ 1234a56789 → ○ 123456789a → ○ a123b4567c → ○ import java.util.regex.*; Pattern pattern = Pattern.compile("?a-zA-Z{1,}?"); Matcher matcher = pattern.matcher("文字列"); if(matcher.matches()==false){   return "NG"; } アドバイス宜しくお願いします。

    • ベストアンサー
    • Java
  • 正規表現で、あるパターンの文字列をすべて抜き出したい。

    例えば、 String text = "abcsjfkakcfahcf"; とあった場合に a*c のパターンをすべて抜き出したいとします(abc,akc,ahc)。 そうした場合は、どのように書けばよいのでしょうか? Pattern pattern = Pattern.compile(".a.c."); Matcher matcher = pattern.matcher(text); if(matcher.find()){ System.out.println(matcher.group()); } ですと、akcしか抜き出せないようです…。 よろしくお願いします。

    • ベストアンサー
    • Java