• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:本文から指定文字列の抽出)

メールアドレスを抽出する際の正規表現がうまくいかない理由

このQ&Aのポイント
  • 質問者は、与えられた文字列からメールアドレスを抽出するために正規表現を使用していますが、うまくいかない状況です。
  • 正規表現パターンでは、捕捉グループと置換文字列を使用してメールアドレスのみを抽出しようとしています。
  • しかし、正規表現の指定方法に問題がある可能性があります。具体的な指定方法に関しては、Javaのドキュメントを参考にすることができます。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.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); } }

yn001ster
質問者

お礼

本当にありがとうございます。 一発で解決してしまいました。 本当に感謝です。 置換して一括で表示しようとしていましたが、そもそも「置換」なんてしないで、「検索」でよかったんですね。検索して、1つずつ表示すればよいと。 正規表現の問題だと思っていたので、とても勉強になりました。 本当にありがとうございます!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

^…$ (文字列の初めから終わりまで) としているからマッチしないんじゃないかと思います。 あと、 DOTALLは、 Pattern.DOTALL とすればいいと思います。

yn001ster
質問者

お礼

ご回答ありがとうございます。 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 としたいのですが。 よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A