PHP: Получить конкретные ссылки с помощью preg_match_all () - PullRequest
1 голос
/ 24 марта 2012

Я хочу извлечь конкретные ссылки с веб-сайта.

Ссылки выглядят так:

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

Ссылки всегда одинаковы - за исключением названия бренда (в данном случае Mercedes).

Пока все работает нормально, но доставляет только первую часть ссылки:

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

И это дает первую ссылку со всем сайтом: (

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

Есть идеи?

Обратите внимание, что я использую preg_match_all (), а не preg_match ().

Спасибо, Chama

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Попытка синтаксического анализа xml / html с регулярным выражением обычно не является хорошей идеей, но если вы уверены, что он всегда будет хорошо отформатирован, это должно вернуть любые ссылки в содержании.

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

Это будет более точно соответствовать только примеру шаблона, который вы дали, но не уверен, какие варианты у вас могут быть

/<a href="([0-9]{7},offer-[a-z]+-used\.html)">/
// [7 numbers],offer-[at least one letter]-used.html
1 голос
/ 24 марта 2012

Хотя .*? и будет (= менее жадным), в обоих случаях вы должны указать более точный шаблон.

Здесь [\w.-]+.Но [^">]+ также может быть выполнимо, если исходный код HTML согласован (или вы специально хотите игнорировать другие варианты).

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