• ベストアンサー

正規表現で、あるパターンの文字列をすべて抜き出したい。

例えば、 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
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • atse
  • ベストアンサー率83% (36/43)
回答No.1

//■があるところが変更した行 String text = "abcsjfkakcfahcf"; Pattern pattern = Pattern.compile("a.c");//■a.cの両サイドのドットは必要ない Matcher matcher = pattern.matcher(text); while (matcher.find()) {//■全部書き出すためにwhile System.out.println(matcher.group()); }

その他の回答 (1)

回答No.2

あまり検証してないけど aacc みたいなパターンが質問者の意図通りの挙動かを確認してくれ。>質問者さん。

関連するQ&A

  • 正規表現について

    現在下記のように文字列をチェックする正規表現を作成したのですが、 「禁止文字を含まない」と表示されてしまいます。 どこが問題なのか、指摘していただければと思います。 よろしくお願いします ---------------------------------------------------- // チェックする文字列 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
  • 正規表現の検索について

    正規表現のエスケープしなければいけない文字が文字列に含まれているかどうかをチェックしたいのですがうまくいきません。 今は、下記のようにして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
  • 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
  • 正規表現の表現方法について

    じゃんけんの手を正規表現での表現方法について。 それぞれの手を定数で表現しています。場にじゃんけんの手が012と出たときに並び替えた120や210もパターン認識させたいと考えています。 正規表現の記述について教えていただきたいです。 現在のコード package game; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { // ユーザーの手を格納する変数 private static int playerhand; private static int user1hand; private static int user2hand; // 各々の勝数 private static int playercount = 0; private static int user1count = 0; private static int user2count = 0; // ジャンケンの手を表す定数を宣言する private static final int STONE = 0; private static final int SCISSORS = 1; private static final int PAPER = 2; // 判定する文字列 private static String checkhand = null; public static void main(String[] args) { // ここでじゃんけんさせる playerhand = STONE; user1hand = PAPER; user2hand = STONE; // 判定する文字列 checkhand = String.valueOf(playerhand) + String.valueOf(user1hand) + String.valueOf(user2hand); System.out.println(checkhand); // 判定するパターンを用意 // 引き分けパターン Pattern draw = Pattern.compile("([0]&[1]&[2])|([0]&[0]&[0])|([1]&[1]&[1])|([2]&[2]&[2])"); // 2人勝ちパターン Pattern win2 = Pattern.compile("([0]&[0]&[1])|([1]&[1]&[2])|([2]&[2]&[0])"); // 1人勝ちパターン Pattern win1 = Pattern.compile("([0]&[1]&[1])|([1]&[2]&[2])|([2]&[0]&[0])"); // パターンとの一致を確認するための準備 Matcher checkdraw = draw.matcher(checkhand); Matcher checkwin2 = win2.matcher(checkhand); Matcher checkwin1 = win1.matcher(checkhand); if (checkdraw.find()) { System.out.println("引き分けパターン"); } else if (checkwin2.find()) { System.out.println("2人勝ちのパターン"); checkWin2(); } else if (checkwin1.find()) { System.out.println("1人勝ちのパターン"); checkWin1(); } } /** * 1人勝ちで勝者の勝数を増やすメソッド * */ public static void checkWin1() { if (playerhand == user1hand) { user2count++; } else if (user1hand == user2hand) { playercount++; } else { user1hand++; } } /** * 2人勝ちで勝者の勝数を増やすメソッド */ public static void checkWin2() { if (playerhand == user1hand) { playercount++; user1count++; } else if (user1hand == user2hand) { user1hand++; user2hand++; } else { playercount++; user2count++; } } } ※OKWAVEより補足:「Webシステム開発」についての質問です。

    • ベストアンサー
    • Java
  • 正規表現

    String u = "http://~~~~"; Pattern ptn = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+",Pattern.CASE_INSENSITIVE); Matcher objMch = ptn.matcher(u); if (!objMch.matches()) return "error"; とした場合、 普通のURLなら大丈夫ですが、http://......?a=1&... などのようにパラメータが付くと error がかえされます。 ということで、? や & などでパラメータが付いても error が帰らないようにする正規表現を教えてください。お願いします。

    • ベストアンサー
    • Java
  • 正規表現が表示されない・・・

    こんにちは。ちょっと質問です。J2SE1.4.0を使用しているのですが、以下のコードで正規表現を表示しようとしているのですが、表示されません。 <%@ page contentType="text/html;charset=Shift_JIS" import="org.apache.oro.text.regex.*" %> <html> <head> <title>正規表現の検索</title> </head> <body> <% String strMsg="メールアドレスは、******@nifty.com です。"; strMsg+="******@mcn.ne.jp もあります。"; Pattern ptn=Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE); Matcher mtch=ptn.matcher(strMsg); while(mtch.find()){ out.println(mtch.group() + "<br />"); } %> </body> </html> コードが違うのかなと思って、他のパソコンでやったのですが、こっちでは正常に動作されました。Jakartaサイトに行って、OROをインストールしたのですが、これでも表示されませんでした。自分なりに手は尽くしたのですが、わかりません。これ以外に他に何か方法はありますでしょうか?

  • 文字列を抽出したい

    以下のようなプログラムを組んでみたすると↓このようになるのですが  /xxx_serv/file_02.jsp HTTP/1.1 できれば↓このようにしたいのですがいい方法を教えてください /xxx_serv/file_02.jsp import java.util.regex.*; public class test{  public static void main(String[] args) { String strVal ="192.***.0.* - - [09/Feb/2005:18:13:33 +0900] POST /xxx_serv/file_02.jsp HTTP/1.1 200 6114";  System.out.println(mailSelect(strVal)); } static String mailSelect(String strVar){ StringBuffer objSb=new StringBuffer(); Pattern objPtn=Pattern.compile(" /.* ",Pattern.CASE_INSENSITIVE); Matcher objMch=objPtn.matcher(strVar); while(objMch.find()){ objSb.append(objMch.group()); } return objSb.toString(); } }

    • ベストアンサー
    • Java
  • 正規表現で入力チェックするには。

    正規表現を使用して入力チェックをしようと考えていますが特殊記号文字がうまくいきません。 [0-9a-zA-Z]で英数字はチェックする事ができたんで下記の特殊文字を指定するとエラーになってしまい困っています。 「!"#$%&'()=~|`{+*}<>?_-^\@[;:],./」 ロジックは以下のように記述しています。 Pattern p = Pattern.compile("[0-9a-zA-Z!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./]"); Matcher m = p.matcher("文字列"); if(m.matches() == true){   System.out.println("1"); } else{   System.out.println("2"); } ※「\」と「"」はエスケープしています。 下記のエラーメッセージが表示されてなんとなくですが正規表現でエラーになっているのはわかるんですが・・・ Illegal character range near index 32 [0-9a-zA-Z!"#$%&'()=~|`{+*}<>?_-^\@[;:],./]                       ^ 申し訳ありませんがアドバイスいただけませんでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • 時間の正規表現

    正規表現で、17:00:00という文字の17:00(時:分)の部分だけを見て、時間として認識させたいのですが、どのように記述すればいいのでしょうか? 以下のプログラムを作成したのですが、なぜかfalseが返されてしまって困っています。 教えてください。宜しくお願いいたします。 String str_time = "17:00:00"; String str = "([0-9]|([0-1][0-9]|[2][0-3]))[:][0-5][0-9]"; Pattern pat = Pattern.compile( str ) ; Matcher mat = pat.matcher( str_time ) ; if( mat.matches() ){ // 処理 }

    • ベストアンサー
    • Java
  • Matcher

    こんばんは。 どうしてもわからない部分があります。 Pattern pattern = Pattern.compile(".*\\[.*@.* .*\\]\\$ ", Pattern.DOTALL); Matcher matcher = pattern.matcher("\r\npwd\r\n/home/hoge\r\n[hoge@hoge-fedora hoge]$ "); System.out.println("1:" + matcher.find(0)); System.out.println("2:" + matcher.groupCount()); 上記のプログラムを実行すると、私の考えでは 1:true 2:1 となると思うのですが、実際は 1.true 2:0 となります。 正規表現と一箇所マッチしてるのに、なぜ0なのでしょうか? ご存知の方いらっしゃいましたら教えてください。お願いします。

    • ベストアンサー
    • Java