15

私の意図は、Web ページから電子メール アドレスを取得することです。ページのソースがあります。ページのソースを 1 行ずつ読んでいます。現在読んでいる行からメールアドレスを取得したいと思います。この現在の行には、電子メールがある場合とない場合があります。多くの正規表現の例を見ました。しかし、それらのほとんどはメールアドレスを検証するためのものです. 検証されていないページ ソースからメール アドレスを取得したい。http://emailx.discoveryvip.com/が機能しているため、機能するはずです

入力行の例は次のとおりです。

1)<p>Send details to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%72%65%62%65%6b%61%68@%68%61%63%6b%73%75%72%66%65%72.%63%6f%6d">neeraj@yopmail.com</a></p>

2)<p>Interested should send details directly to <a href="http://www.abcdef.com/abcdef/">www.abcdef.com/abcdef/</a>. Should you have any questions, please email <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%6a%6f%62%73@%72%65%6c%61%79.%65%64%75">neeraj@yopmail.com</a>.

3)Note :- Send your queries at  neeraj@yopmail.com  for more details call Mr. neeraj 012345678901.

例 1、2、および 3 から neeraj@yopmail.com を取得したいです。Java を使用していますが、rexexp が苦手です。助けて。

4

4 に答える 4

16

RFC 2822に従って電子メール アドレスの形式を検証するには、次のようにします。

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

そしてここにregular-expressions.infoからの説明があります:

この正規表現には、@ の前の部分と @ の後の部分の 2 つの部分があります。@ の前の部分には 2 つの選択肢があります。一連の文字、数字、および 1 つ以上のドットを含む特定の記号で構成できます。ただし、ドットが連続して表示されない場合や、メールアドレスの先頭または末尾にドットが表示されない場合があります。もう 1 つの方法では、@ の前の部分を二重引用符で囲む必要があり、引用符の間に任意の ASCII 文字列を含めることができます。空白文字、二重引用符、およびバックスラッシュは、バックスラッシュでエスケープする必要があります。

そして、あなたはここでこれをチェックすることができます: Rubular example .

于 2013-04-17T07:20:08.250 に答える
14

正しいコードは

Pattern p = Pattern.compile("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b",
    Pattern.CASE_INSENSITIVE);
Matcher matcher = p.matcher(input);
Set<String> emails = new HashSet<String>();
while(matcher.find()) {
  emails.add(matcher.group());
}

これにより、長いテキスト/html入力にメールアドレスのリストが表示されます.

于 2014-04-10T15:04:50.263 に答える
4

この正規表現のようなものが必要です:

".*(\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b).*"

一致すると、最初のグループを抽出でき、それがメールになります。

String regex = ".*(\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b).*";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("your text here");
if (m.matches()) {
    String email = m.group(1);
    //do somethinfg with your email
}
于 2013-04-17T07:16:11.410 に答える