2012-01-21 70 views
0

原始格式:获取所有从页面的URL使用正则表达式

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

1.我需要获取这种格式的所有URL:

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

任何性质值是从URL更改为另一个值的地方。其余的都是固定的。

这里是我的尝试:

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

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

+0

你想要的只是链接(即锚的'href'属性),或者也在运​​行文本(这将不会被浏览器作为任何特殊处理)? – Richard

+0

是的,这些链接分布在html href中的所有页面上。我需要将他们全部收集到一个数组中。网址是一个数组。没有其他 – user311509

回答

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。使用未加标准的正则表达式正确解析HTML是不可能的 - 他们没有必要的表达能力。我不知道什么样的HTML解析器可用于PHP,但您可能需要查看它们。

+0

它看起来像'preg_match'只返回第一个匹配;对于所有比赛,你需要'preg_match_all'。请注意,对于'preg_match_all',匹配数组的格式稍有不同,因此请确保阅读文档以了解如何使用它。 –

+0

是的,刚刚解决了......你回答的同时我删除了我的问题......干杯 – user311509