PHP正则表达式奇怪的情况

时间:2011-11-18 07:40:58

标签: php regex

我正在尝试使用一些正则表达式来抓取网站。但该网站不是用格式良好的HTML编写的。事实上,HTML很糟糕,根本没有结构。但我已成功解决了大部分问题。我现在遇到的问题是,在某些电子邮件中,跨度包裹在电子邮件的随机部分中,如下所示:

****.*******@g<span class="tournamenttext">mail.com</span>
************<span class="tournamenttext">@yahoo.com</span>
<span class="tournamenttext">**********@mail.com</span>
*******@gmail.com

有没有办法检索所有这些不一致的电子邮件?

2 个答案:

答案 0 :(得分:1)

您只需删除所有span代码,只需将</?span[^>]*>替换为空,然后在结果中尝试您最喜欢的电子邮件地址查找器。

答案 1 :(得分:1)

$string ='****.*******@g<span class="tournamenttext">mail.com</span>
************<span class="tournamenttext">@yahoo.com</span>
<span class="tournamenttext">**********@mail.com</span>
*******@gmail.com';

$pattern = "/<\/?span[^>]*>/";
$string = preg_replace($pattern, "", $string);

之后$string将仅邮寄

****.*******@gmail.com
************@yahoo.com
**********@mail.com
*******@gmail.com

您的代码将是这样的

$text[1]->innertext = "Where innertext contains something like: "<em>Local (Open)
 Tournament.</em> ****.*******@g<span class="tournamenttext">mail.com</span>"

// Firstly clear spans
$pattern = "/<\/?span[^>]*>/";
$text[1]->innertext = preg_replace($pattern, "", $text[1]->innertext);

// Preg Match mail
$email_regex = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; // Just an example email match regex
preg_match($email_regex, $text[1]->innertext, $theMatch);
echo '<pre>' . print_r($theMatch, true) . '</pre>';