首先,请不要尝试使用正则表达式解析随机 html,它不会起作用,它迟早会坏掉。正则表达式不是解析 html 的工具,它不能正确解析它。3个简单的例子:
<a href='stuff'> (different quotes)
<!-- <a href="stuff">-->
<a style='something' href="stuff">
这些将破坏您的应用程序。还有无数其他示例,这些示例不起作用并且会破坏它!甚至 Chuck Norris 也不能正确地用正则表达式解析 html,没有人可以!
但我假设你已经知道了,这只是一小部分简单的已知 html,不会公开发布,所以让我们回到你的问题:
preg_match_all 期望正则表达式带有分隔字符,并且它匹配您在它们之间写入的所有内容。如果你写
'<a href="(.*?)">'
作为正则表达式,它将开头的“<”视为分隔符,因此不匹配。在它周围写上斜杠(或任何其他字符):
preg_match_all('/<a href="(.*?)">/', $page, $result);
现在,它将像这样匹配:
[0] => <a href="/stuff">
但你只想要'/东西'。$result 给你一个数组。在 $result[0] 中是所有匹配的正则表达式,在 $result[1] 中是第一个 () 匹配的,在 $result[2] 中是第二个 () 匹配的子表达式,依此类推......所以,你想要查看 $result[1],你应该在那里找到你想要的。