Мой regex не работает

Я создал робота 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>#

Я изменил это во многих формах, но не работал. В чем подвох?

0

Решение

Проблема заключается в разделении символов: «#», и у вас есть еще «#» в середине регулярного выражения:

цвет: # 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);

http://ideone.com/zoZgez

Вместо «#» я использовал «.» внутри регулярное выражение

0

Другие решения

Я не уверен, правильно ли я понял ваш вопрос. Вы пытаетесь извлечь информацию только из этого <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>$

Обратите внимание, что в основном я избежал косой черты и удалил # от крайностей вашего регулярного выражения.

Живой пример в liveregex.net

Если вам нужно что-то более общее, я думаю, вы могли бы использовать это:

^<a (.*?) href="(?:.*\/)([0-9]*)\/"\s(.*?)>(?:.*)<b>(.*?)<\/b>(?:.*)<\/a>$

Живой пример в liveregex.net

0

По вопросам рекламы [email protected]