Я работаю над проектом, который включает в себя удаление из основных поисковых систем (точнее - проверка рейтинга страницы и поиск похожих страниц).С помощью curl я вызываю поисковую систему, затем с одним preg_match_all я получаю все результаты в массиве.У меня нет проблем с Google и Bing, но когда я написал скрипт для Yahoo, он работал, но у него есть ошибка.
Я тестирую с поиском "autobedrijf" в Нидерландах.У меня есть 100 результатов на странице, но в результате я получаю только 74 из них в массиве результатов.Я скопировал регулярное выражение в этот инструмент , вставил исходный код страницы Yahoo и там он соответствует всем 100 результатам.
Это первые результаты от Yahoo:

но в массиве я получаю:
-ledensite
-Home Page
-Welkom bij autobedrijf TolsmaExmorra
-etc.
Это означает, что после "Домашней страницы" он пропускает 3 результата.Я пытался найти разницу между результатами 5 и 6 (последний пропущен и следующий), но я не нашел причин не соответствовать 5-му.
Это preg_match_all script:
$pattern = '@<div>\s*<h3>\s*<a[^<>]*\shref="([^*"]*\*\*)*([^<>]*)">
([^<>]*(<b>[^<>]*</b>)*[^<>]*(<wbr>)*[^<>]*)</a>\s*</h3>\s*</div>@siU';
preg_match_all($pattern, $result['EXE'], $matches);
Исходный код страницы Yahoo для этих двух результатов выглядит следующим образом:
<li><div class="res"><div><h3><a dirtyhref="http://nl.wrs.yahoo.com
/_ylt=A7x9Qb3rKqxN1XYA1PhzKAx.;_ylu=X3oDMTBydXF0bjc3BHNlYwNzcgR
wb3MDNQRjb2xvA2lyZAR2dGlkAw--/SIG=11n0lgcgp/EXP=1303157611/**http%3a
//www.autobedrijfgreijmans.nl/" class="yschttl spt"
href="http://nl.wrs.yahoo.com/_ylt=A7x9Qb3rKqxN1XYA1PhzKAx.;
_ylu=X3oDMTBydXF0bjc3BHNlYwNzcgRwb3MDNQRjb2xvA2lyZAR2dGlkAw--/SIG
=11n0lgcgp/EXP=1303157611/**http%3a//www.autobedrijfgreijmans.nl/">
<b>Autobedrijf</b> Greijmans Weert - Toyota <wbr>Specialist Occasions
APK</a></h3></div><div class="abstr">In het databestand van
<b>Autobedrijf</b> Greijmans vindt u zeer eenvoudig tweedehands auto's,
bedrijfswagens, klassiekers. Kijk snel op onze website</div><span
class="url">www.<b>autobedrijfgreijmans.nl</b></span> - <a
href="http://nl.wrs.yahoo.com/_ylt=A7x9Qb3rKqxN1XYA1fhzKAx./SIG=
186dh8afd/EXP=1303157611/**http%3a//74.6.239.67/search/cache%3fei=
UTF-8%26p=autobedrijf%26n=100%26va_vt=any%26vo_vt=any%26vp_vt
=any%26vst=0%26vf=all%26vm=p%26u=www.autobedrijfgreijmans.nl/
%26w=autobedrijf%26d=IxshPvbJWijU%26icp=1%26.intl=nl%26sig=yI6R7vJN31J
T92YKlVnT1g--">In de cache</a></div></li>
<li><div class="res"><div><h3><a dirtyhref="http://nl.wrs.yahoo.com
/_ylt=A7x9Qb3rKqxN1XYA1vhzKAx.;_ylu=X3oDMTBybWh0ZnN2BHNlYwNzcgRwb3MDNg
Rjb2xvA2lyZAR2dGlkAw--/SIG=11l17c21h/EXP=1303157611/**http%3a//www.
autobedrijf-tolsma.nl/" class="yschttl spt" href="http://www.autobedrijf
-tolsma.nl/">Welkom bij <b>autobedrijf</b> Tolsma Exmorra</a></h3></div>
<div class="abstr">Welkom op de vernieuwde website van <b>autobedrijf</b>
Tolsma Exmorra incl.digitale showroom <b>...</b> Welkom bij <b>autobedrijf
</b> tolsma. Op deze site nodigen wij U uit een <b>...</b></div><span
class="url">www.<b>autobedrijf-tolsma.nl</b></span> - <a href="http://nl.
wrs.yahoo.com/_ylt=A7x9Qb3rKqxN1XYA1_hzKAx./SIG=1840la9c5/EXP=1303157611/
**http%3a//74.6.239.67/search/cache%3fei=UTF-8%26p=autobedrijf%26n=100
%26va_vt=any%26vo_vt=any%26vp_vt=any%26vst=0%26vf=all%26vm=p%26u=
www.autobedrijf-tolsma.nl/%26w=autobedrijf%26d=YBZQIvbJWlDf%26icp=1%26.
intl=nl%26sig=zRU95PdBOTfII93dZ411ZA--">In de cache</a></div></li>
Я застрял на этом уже более 5 часов и могуВыяснить, почему инструменты регулярных выражений соответствуют обоим результатам, в то время как preg_match_all
в PHP соответствует только второму .
Если это имеет значение - я тестирую на Windows сApache и PHP 5.3.5.
Любые советы приветствуются, я могу предоставить дополнительные примеры и протестировать код, если вам интересно.