preg_match_all无法正常工作

Fey*_*Fey 1 php regex html-parsing

我想根据以下正则表达式在网页上获得匹配项:(。*)我在regexpal.com(在线正则表达式测试工具)上对其进行了测试,并且工作正常。但是,当我在php中使用它时,找不到任何匹配项。我在php中使用的语句是

preg_match_all("/<a href=\"\/title\/.*\/\">(.*)<\/a>/", $content, $matches);
Run Code Online (Sandbox Code Playgroud)

我检查了$ content,这是正确的。那我的陈述有什么不对吗?谢谢!

Cod*_*gry 5

拜托,拜托...为了上帝的爱,请不要在/中包装用于处理URL或HTML的正则表达式。您必须到处避开它。它是可怕的。看这里:

preg_match_all('~<a href="/title/[^">]+/">(.*?)</a>~si', $content, $matches);
Run Code Online (Sandbox Code Playgroud)
  1. 单引号。不再需要转义双引号。如果没有可扩展的“ {$ variables}”,为什么还要使用双引号?
  2. 将RegExp换成任何非保留字符。对于URL和HTML /,这是最糟糕的选择,因为它会拖累您使其逃脱冗余地狱。
  3. 在HTML中使用“ si”作为标记,因为标记可以是多行和。+?要么 。*?默认情况下匹配多行。并且您需要不区分大小写。
  4. 避免使用。+?在属性中。您可以捕获整个标签。也添加中断字符。请参见上面的模式...因此,如果HTML损坏,您就不必做太多了。

有更多的方法可以改善这一点,但这应该可以做到。

希望能帮助到你。