奇怪的情况下的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 

有没有一种方法来检索这一切矛盾的电子邮件?

+3

用strip_tags($内容)? – galchen

+0

这些文本在哪里出现在php文件或一些文本或数据库..你对此更具体。 – Rafee

+0

我从我说的网站上刮。我不知道它是作为静态html存储还是存储在数据库中。由于存在如此多的不一致性,我假定使用静态html – LordZardeck

$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>'; 
+0

看起来像我想要的,但是有什么办法可以用类来做同样的事情吗?这样我不会删除任何不必要的代码? – LordZardeck

+0

在类中创建一个清除函数,如private function clear($ string){$ pattern =“/ ] *> /”;返回preg_replace($ pattern,“”,$ string); } –

+0

如果我preg_match,我得到一个空数组 – LordZardeck

您可以简单地删除所有span标签,将</?span[^>]*>替换为无,然后尝试使用您最喜欢的电子邮件地址查找结果。