我正在尝试使用一些正则表达式来抓取网站。但该网站不是用格式良好的HTML编写的。事实上,HTML很糟糕,根本没有结构。但我已成功解决了大部分问题。我现在遇到的问题是,在某些电子邮件中,跨度包裹在电子邮件的随机部分中,如下所示:
****.*******@g<span class="tournamenttext">mail.com</span>
************<span class="tournamenttext">@yahoo.com</span>
<span class="tournamenttext">**********@mail.com</span>
*******@gmail.com
有没有办法检索所有这些不一致的电子邮件?
答案 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>';