PREG_MATCH_ALL参加最后一场比赛

时间:2011-10-10 22:43:15

标签: php

你好我刚刚遇到PREG_MATCH_ALL()的问题 让我说我有2个字符串...... 拯救你 和 如果上传者名称怎么办? 我需要继续保存你,所以我正在使用以下的模式

preg_match_all('/<span id="title.*">(.*)<\/span>/i',,);

因此我得到了

  

救你   上传者名称

我认为这是因为它采取了最后一种方法来解决它?或者喜欢匹配第一个?谢谢

编辑:

<a href="#" onclick="searchActions.showLyrics('14840_100733666_21',9965243); return false;">Can&#39;t Keep My Hands Off You</a></span>

得到结果

<a href="Your Love Is A Lie"</a>

/<span id="title(.*?)">(.*?)<\/span>/i

1 个答案:

答案 0 :(得分:2)

原因是.*贪婪。第一个.*(在title之后)会吞下尽可能多的字符,然后从字符串的末尾开始回溯,直到正则表达式的其余部分匹配为止。

要修复它,请使用ungreedy版本.*?和/或将.替换为某些与引号不匹配的字符类(例如[^"]):< / p>

preg_match_all('/<span id="title[^"]*">(.*?)<\/span>/i', ..., ...);

有关详细信息,请参阅http://www.php.net/manual/en/regexp.reference.repetition.php

(Ps.Levi Morrison是对的 - 这不是解析HTML的好方法。使用真正的HTML解析器,例如DOMDocument::loadHTML()。)