使用Regex从页面获取所有URL

时间:2012-01-21 08:51:16

标签: php regex

原始格式:

  

<a href="http://www.example.com/t434234.html" ...>

1。我需要获取此格式的所有网址:

http://www.example.com/t[ANY CHARACTER].html

ANY CHARACTER是值从URL更改为另一个值的位置。其余的都是固定的。

以下是我的尝试:

preg_match("#http:\/\/www\.aqarcity\.com\/t[a-zA-Z0-9_]\.html#", $page, $urls);

我得到空的结果。我不知道我哪里出错......

1 个答案:

答案 0 :(得分:1)

问题似乎是[a-zA-Z0-9_]只匹配一个字符。如果要匹配零个或多个字符,请使用[a-zA-Z0-9_]*。对于一个或多个,请使用[a-zA-Z0-9_]+。对于正好六个字符,请使用[a-zA-Z0-9_]{6}。对于例如一到六个字符,请使用[a-zA-Z0-9_]{1,6}

另请注意,由于您使用#作为分隔符,因此无需转义/个字符。据我所知,这不会使你的代码行为异常,但如果在斜杠之前删除反斜杠,它会更容易阅读。

最后,请注意正则表达式是一种使用HTML的危险方式。在这种情况下,您可以从评论,Javascript代码和其他非链接的内容中选择匹配的URL。用unaugmented正则表达式正确解析HTML实际上是不可能的 - 它们没有必要的表达能力。我不知道PHP可以使用哪种HTML解析器,但您可能需要查看它们。