PHP:获取与preg_match_all()的特定链接

时间:2012-03-24 16:44:02

标签: php regex preg-match-all expression

我想从网站中提取特定链接。

链接看起来像这样:

<a href="1494761,offer-mercedes-used.html">

链接总是相同的 - 除了品牌名称(在这种情况下是梅赛德斯)。

到目前为止,此工作正常,但仅提供链接的第一部分:

preg_match_all('/((\d{7}),offer-)/s',$inhalt,$results);

这提供了整个网站的第一个链接:(

preg_match_all('/((\d{7}).*html)/s',$inhalt,$results);

有什么想法吗?

请注意,我使用的是preg_match_all()而不是preg_match()。

谢谢, 查马

2 个答案:

答案 0 :(得分:1)

虽然.*?可以做(=少贪心),但在这两种情况下都应指定更精确的模式。

这里[\w.-]+会这样做。但是,如果HTML源代码一致(或者您特别希望忽略其他变体),[^">]+也可能是可行的。

preg_match_all('/((\d{7}),offer-[\w.-])/s',$inhalt,$results);

答案 1 :(得分:1)

尝试使用正则表达式解析xml / html通常不是一个好主意,但是如果你确定它的格式总是很好,那么这应该返回内容中的任何链接。

/<a href="([^">]+)">/

这将更贴切地匹配您提供的示例模式,但不确定您可能具有哪些变体

/<a href="([0-9]{7},offer-[a-z]+-used\.html)">/
// [7 numbers],offer-[at least one letter]-used.html