• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:URL\正規表現@java)

JavaでURLの正規表現を使いたい

このQ&Aのポイント
  • JavaでURLの正規表現を使いたいと思いますが、Perlの正規表現をそのまま使うことができません。
  • URLの正規表現をエディタにコピペしても正しく動作しないため、一部を修正して使おうとしましたが、正確にマッチしませんでした。
  • JavaでURLの正規表現を実現するための方法を教えてください。

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

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

No.1です。 もう解決した、とのことなので、 アレなのだけど。 yahooのトップページ http://www.yahoo.co.jp/ のHTMLファイルにおいて、下のプログラムを試したところ、 100個ぐらいのURLアドレスがマッチしたぞ。 一応、報告ね。 ------------------------------------- (※正規表現部分は省略) import java.util.regex.Matcher; import java.util.regex.Pattern; import java.io.*; public class Reg {  void test() {   String a = "正規表現";//※省略   Pattern pattern = Pattern.compile(a);   String b = load("index.html");//引数で指定した      //HTMLファイルの中身をまるごとStringにする   Matcher matcher = pattern.matcher(b);      int count = 0;   while (matcher.find()) {    System.out.println(count + ": " + matcher.group());    count++;   }  }    /*HTMLファイルの中身をまるごとStringにする*/  String load(String fname){   StringBuffer sb = new StringBuffer();   try{    BufferedReader br     = new BufferedReader(new FileReader(fname));    String line;    while((line = br.readLine()) != null) {     sb.append(line+"\n");    }    br.close();   }catch(FileNotFoundException e){    System.err.println("ファイル "+fname+" は存在しません");   }catch(IOException e){    System.err.println(e);   } finally {    return sb.toString();   }  }  public static void main(String[] args) {   Reg r = new Reg();   System.out.println("-----テスト開始-----");   r.test();   System.out.println("-----テスト終了-----");  } }

ZeroWorld
質問者

お礼

本当ですね。なんでだめだったんでしょう。 どっかミスしてたのかもしれませんね・・。 バックアップがあるのであとで引っ張り出して自分の 書いたのと何処が違ったのか検証してみたいと思います。 それにしてもPerlの正規表現もほぼそのまま つかえるんですね。やっぱり正規表現て便利かも! 本格的なコードまでかいてテストしていただいて 本当にありがとうございました。

その他の回答 (1)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

>エディタに貼り付けて\を\\に置き換えたものを 正規表現の部分にしたところ ここはイイと思う。 >正確にマッチしてくれませんでした。 ほんと? 僕が試しに書いたソースコードでは、 (おそらくたぶん思ったとおりに)マッチしたぞ。 「マッチングの対象とするテキスト」としてどんなのを指定した? たとえば 「このURLはhttp://java.sun.com/education/ja/index.html です」 というテキストだとうまくマッチしないハズ。 (※URLアドレスの前にスペースが入っていない) どうだろう? ------------------------- これでも解決しなければ、 ソースコードを提示してみるといいと思う。 ※「正規表現の文字列」だけは省略するとして。

ZeroWorld
質問者

お礼

実は質問してからだいぶたってしまいましたため、面倒ながら indexOfで代用してしまいました。削除か締め切るべきところですが こちらもきになったのでしませんでした。エスケープの部分は やはり\\でよかったのですね。それだけわかっただけでもありがたく 思います。実はその時点でまちがってるかもしれないと思ってました ありがとうございました。

ZeroWorld
質問者

補足

ちなみにデータはYahooのトップページだったのですが、 findでまわしてgroupで拾ってました。その時に 3~5個くらいしか拾えませんでしたのであれ? っておもったんです。コードはこんなかんじでした Pattern pattern = Pattern.compile("正規表現"); Matcher matcher = pattern.matcher(String); while((matcher.find())){  System.out.println(matcher.group()); } でも正規表現て便利ですけどデバッグしにくいきがします 完璧にデバッグするにはどうしたらよいんだろう・・。やっぱり 想定されるあらゆるデータをテストしなければならないんでしょうか なれないためか正規表現を使うとなにか不安です。