奇怪的情况下的PHP正则表达式
我想用一些正则表达式来刮一个网站。但该网站不是写在格式良好的HTML。实际上,html很糟糕,而且几乎没有结构。但我已经设法解决它的大部分。我现在遇到的问题是,在一些电子邮件,跨度是围绕像这样的电子邮件的一个随机部分包裹:奇怪的情况下的PHP正则表达式
****.*******@g<span class="tournamenttext">mail.com</span>
************<span class="tournamenttext">@yahoo.com</span>
<span class="tournamenttext">**********@mail.com</span>
*******@gmail.com
有没有一种方法来检索这一切矛盾的电子邮件?
$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>';
看起来像我想要的,但是有什么办法可以用类来做同样的事情吗?这样我不会删除任何不必要的代码? – LordZardeck
在类中创建一个清除函数,如private function clear($ string){$ pattern =“/ ] *> /”;返回preg_replace($ pattern,“”,$ string); } –
如果我preg_match,我得到一个空数组 – LordZardeck
您可以简单地删除所有span
标签,将</?span[^>]*>
替换为无,然后尝试使用您最喜欢的电子邮件地址查找结果。
用strip_tags($内容)? – galchen
这些文本在哪里出现在php文件或一些文本或数据库..你对此更具体。 – Rafee
我从我说的网站上刮。我不知道它是作为静态html存储还是存储在数据库中。由于存在如此多的不一致性,我假定使用静态html – LordZardeck