0

我正在努力完成一些预赛。

我基本上想出了这个

preg_match_all('<a href="(.*?)">', $page, $result);

但是这个的输出是

Array
(
    [0] => Array
     (
        [0] => a href="/stuff"
        [1] => a href="/stuffstuffstuff"

         and much more of this.

我想删除 a href 以及斜线和引号,只保留内容。我尝试了很多,但这些东西不断回来,任何帮助都会很感激。

多谢你们

4

1 回答 1

2

首先,请不要尝试使用正则表达式解析随机 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],你应该在那里找到你想要的。

于 2012-12-04T00:47:13.060 回答