電子書籍の厳選無料作品が豊富!

本文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 …
※compile()中の「32」はDOTALL フラグです。本当は文字で指定したいのですが、指定の仕方がわからなく、仕方なくこうしています。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …

A 回答 (2件)

簡単なサンプルを書いてみました。


参考にしてみて下さい。
----------------------------------------------------------------
import java.util.*;
import java.util.regex.*;

public class MailAddress {
public static void showMessage(String msg) {
Pattern p = Pattern.compile("([a-zA-Z0-9_\\.\\-]+?@[A-Za-z0-9_\\.\\-]+)", Pattern.DOTALL);
Matcher m = p.matcher(msg);
int pos = 0;

while(m.find(pos)){
System.out.println(m.group(0));
pos=m.end(0);
}
}

public static void main(String argv[]){
String msg ="test1@test.com\n<test2@test.com>\nztest3@test.comz\ntest4@test.com\n<test5@test.com>\nztest6@test.comz";
showMessage(msg);
}
}
    • good
    • 0
この回答へのお礼

本当にありがとうございます。
一発で解決してしまいました。
本当に感謝です。


置換して一括で表示しようとしていましたが、そもそも「置換」なんてしないで、「検索」でよかったんですね。検索して、1つずつ表示すればよいと。

正規表現の問題だと思っていたので、とても勉強になりました。

本当にありがとうございます!

お礼日時:2006/06/24 12:21

^…$


(文字列の初めから終わりまで)
としているからマッチしないんじゃないかと思います。

あと、
DOTALLは、
Pattern.DOTALL
とすればいいと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。


1つ進歩しました。

public static void showMessage(Message msg) throws Exception {
Pattern p = Pattern.compile(".*[ \n]([a-zA-Z0-9_.-]+?@[A-Za-z0-9_.-]+).*", Pattern.DOTALL);
Matcher m = p.matcher(msg.getContent() + "");
System.out.println(m.replaceAll("$1"));
//System.out.println(msg.getContent());
}



test1@test.com
<test2@test.com>
ztest3@test.comz
test4@test.com
<test5@test.com>
ztest6@test.comz

を入力として、

ztest6@test.comz

となってしまうのですが、どうすればよいのかわかりますか?

test1@test.com
test2@test.com
ztest3@test.comz
test4@test.com
test5@test.com
ztest6@test.comz

としたいのですが。

よろしくお願いします。

お礼日時:2006/06/23 03:48

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