Я создал робота php regex для извлечения некоторой информации с веб-сайта, но он не работает для некоторых из них в следующем формате:
основной код:
<a class="name" href="http://sitesite.com/go/lid/1111/" target=_blank><font style="color: #006400;font-size: 16px;"><b>SomeText</b></font></a>
и мое регулярное выражение PHP это:
#<a (.*?)" href="http://sitesite\.com/go/lid/([0-9]*)/" (.*?)><font style="color: #006400;font-size: 16px;"><b>(.*?)</b></font></a>#
Я изменил это во многих формах, но не работал. В чем подвох?
Проблема заключается в разделении символов: «#», и у вас есть еще «#» в середине регулярного выражения:
цвет: # 006400
Исправьте ваш код следующим образом:
$txt = '<a class="name" href="http://sitesite.com/go/lid/1111/" target=_blank><font style="color: #006400;font-size: 16px;"><b>SomeText</b></font></a>';
preg_match('#<a (.*?)" href="http://sitesite\.com/go/lid/([0-9]*)/" (.*?)><font style="color: .006400;font-size: 16px;"><b>(.*?)</b></font></a>#', $txt, $m);
print_r($m);
Вместо «#» я использовал «.» внутри регулярное выражение
Я не уверен, правильно ли я понял ваш вопрос. Вы пытаетесь извлечь информацию только из этого <a>
тег? Ли href
всегда начинается с http://sitesite.com/go/lid/...
или вам нужно что-то более общее?
Если вам действительно нужно сопоставить href и тег font, вы можете использовать:
^<a (.*?) href="http:\/\/sitesite.com\/go\/lid\/([0-9]*)\/"\s(.*?)><font style="color: #006400;font-size: 16px;"><b>(.*?)<\/b><\/font><\/a>$
Обратите внимание, что в основном я избежал косой черты и удалил #
от крайностей вашего регулярного выражения.
Если вам нужно что-то более общее, я думаю, вы могли бы использовать это:
^<a (.*?) href="(?:.*\/)([0-9]*)\/"\s(.*?)>(?:.*)<b>(.*?)<\/b>(?:.*)<\/a>$