プロが教えるわが家の防犯対策術!

perlメモさん?にPerlでのURLの正規表現はあるのですが
Javaで使いたいと思います。

Pattern pattern = Pattern.compile("正規表現");
Matcher matcher = pattern.matcher(String);

のステートメントを使う方法をご存知な方おられませんか?
Perlメモさん?の正規表現をエディタにコピペしても
不正なエスケープエラー?がでてだめでした。

(http Urlのごちゃごちゃした奴の下から二番目)
(「\b(?:」で始まる奴です)

なのでエディタに貼り付けて\を\\に置き換えたものを
正規表現の部分にしたところコンパイルはとおりましたが、
正確にマッチしてくれませんでした。

よろしくお願いします。

A 回答 (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("-----テスト終了-----");
 }
}
    • good
    • 0
この回答へのお礼

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

本格的なコードまでかいてテストしていただいて
本当にありがとうございました。

お礼日時:2003/12/26 20:22

>エディタに貼り付けて\を\\に置き換えたものを


正規表現の部分にしたところ

ここはイイと思う。


>正確にマッチしてくれませんでした。

ほんと?
僕が試しに書いたソースコードでは、
(おそらくたぶん思ったとおりに)マッチしたぞ。

「マッチングの対象とするテキスト」としてどんなのを指定した?
たとえば
「このURLはhttp://java.sun.com/education/ja/index.html です」
というテキストだとうまくマッチしないハズ。
(※URLアドレスの前にスペースが入っていない)

どうだろう?
-------------------------
これでも解決しなければ、
ソースコードを提示してみるといいと思う。
※「正規表現の文字列」だけは省略するとして。

この回答への補足

ちなみにデータはYahooのトップページだったのですが、
findでまわしてgroupで拾ってました。その時に
3~5個くらいしか拾えませんでしたのであれ?
っておもったんです。コードはこんなかんじでした

Pattern pattern = Pattern.compile("正規表現");
Matcher matcher = pattern.matcher(String);
while((matcher.find())){
 System.out.println(matcher.group());

}

でも正規表現て便利ですけどデバッグしにくいきがします
完璧にデバッグするにはどうしたらよいんだろう・・。やっぱり
想定されるあらゆるデータをテストしなければならないんでしょうか
なれないためか正規表現を使うとなにか不安です。

補足日時:2003/12/25 19:53
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/12/25 19:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!