1

我想要一个可以接受一个字符串块的reg exp,并找到与格式匹配的字符串:

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

对于所有匹配此格式的字符串,它会提取出在mailto:. 有什么想法吗?

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

4

5 回答 5

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"
  }
}
于 2009-09-04T03:44:55.907 回答
1

regexp.info上有很多不同的选项

一个例子是:

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

在前面加上“ mailto:”是微不足道的。

于 2009-09-03T21:54:55.763 回答
0
/(mailto:)(.+)(\")/

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

于 2009-09-03T21:55:21.190 回答
0

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

(他们有一个专门用于验证或清理电子邮件 -> FILTER_VALIDATE_EMAIL)

问候

于 2009-09-03T22:12:50.977 回答
0

对我来说,工作~<mailto(.*?)>~ 将返回一个包含找到的元素的数组。在这里你可以测试它:https ://regex101.com/r/rTmKR4/1

于 2020-07-30T12:39:07.583 回答