- ベストアンサー
JavaでURLの正規表現を使いたい
- JavaでURLの正規表現を使いたいと思いますが、Perlの正規表現をそのまま使うことができません。
- URLの正規表現をエディタにコピペしても正しく動作しないため、一部を修正して使おうとしましたが、正確にマッチしませんでした。
- JavaでURLの正規表現を実現するための方法を教えてください。
- みんなの回答 (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("-----テスト終了-----"); } }
その他の回答 (1)
- kacchann
- ベストアンサー率58% (347/594)
>エディタに貼り付けて\を\\に置き換えたものを 正規表現の部分にしたところ ここはイイと思う。 >正確にマッチしてくれませんでした。 ほんと? 僕が試しに書いたソースコードでは、 (おそらくたぶん思ったとおりに)マッチしたぞ。 「マッチングの対象とするテキスト」としてどんなのを指定した? たとえば 「このURLはhttp://java.sun.com/education/ja/index.html です」 というテキストだとうまくマッチしないハズ。 (※URLアドレスの前にスペースが入っていない) どうだろう? ------------------------- これでも解決しなければ、 ソースコードを提示してみるといいと思う。 ※「正規表現の文字列」だけは省略するとして。
お礼
実は質問してからだいぶたってしまいましたため、面倒ながら indexOfで代用してしまいました。削除か締め切るべきところですが こちらもきになったのでしませんでした。エスケープの部分は やはり\\でよかったのですね。それだけわかっただけでもありがたく 思います。実はその時点でまちがってるかもしれないと思ってました ありがとうございました。
補足
ちなみにデータはYahooのトップページだったのですが、 findでまわしてgroupで拾ってました。その時に 3~5個くらいしか拾えませんでしたのであれ? っておもったんです。コードはこんなかんじでした Pattern pattern = Pattern.compile("正規表現"); Matcher matcher = pattern.matcher(String); while((matcher.find())){ System.out.println(matcher.group()); } でも正規表現て便利ですけどデバッグしにくいきがします 完璧にデバッグするにはどうしたらよいんだろう・・。やっぱり 想定されるあらゆるデータをテストしなければならないんでしょうか なれないためか正規表現を使うとなにか不安です。
お礼
本当ですね。なんでだめだったんでしょう。 どっかミスしてたのかもしれませんね・・。 バックアップがあるのであとで引っ張り出して自分の 書いたのと何処が違ったのか検証してみたいと思います。 それにしてもPerlの正規表現もほぼそのまま つかえるんですね。やっぱり正規表現て便利かも! 本格的なコードまでかいてテストしていただいて 本当にありがとうございました。