正则表达式用于提取mailto:地址

时间:2009-09-03 21:48:43

标签: php regex string text-extraction

我想要一个reg exp,它可以取一个字符串块,找到符合格式的字符串:

<a href="mailto:x@x.com">....</a>

对于符合此格式的所有字符串,它将提取mailto:之后找到的电子邮件地址。有什么想法吗?

这是内部应用程序所必需的,而不是任何垃圾邮件发送者的目的!

5 个答案:

答案 0 :(得分:3)

如果你想匹配以下内容:

$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>(.*?)\<\/a\>`ism';
preg_match_all($r,$html, $matches, PREG_SET_ORDER);

要紧张并缩短它:

$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>`ism';
preg_match_all($r,$html, $matches, PREG_SET_ORDER);

第二个匹配组将是它的任何电子邮件。

示例:

$html ='<div><a href="mailto:test@live.com">test</a></div>';

$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>(.*?)\<\/a\>`ism';
preg_match_all($r,$html, $matches, PREG_SET_ORDER);
var_dump($matches);

输出:

array(1) {
  [0]=>
  array(5) {
    [0]=>
    string(39) "test"
    [1]=>
    string(1) " "
    [2]=>
    string(13) "test@live.com"
    [3]=>
    string(0) ""
    [4]=>
    string(4) "test"
  }
}

答案 1 :(得分:1)

regexp.info

上有很多不同的选项

一个例子是:

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

mailto:”在此之前是微不足道的。

答案 2 :(得分:1)

/(mailto:)(.+)(\")/

第二个匹配组将是电子邮件地址。

答案 3 :(得分:0)

您可以使用内部PHP过滤器http://us3.php.net/manual/en/book.filter.php

(他们有专门用于验证或清理电子邮件的那个 - &gt; FILTER_VALIDATE_EMAIL)

迎接

答案 4 :(得分:0)

为我工作~<mailto(.*?)>~ 将返回包含找到的元素的数组。 在这里您可以对其进行测试:https://regex101.com/r/rTmKR4/1