установить регулярное выражение для сопоставления с шаблоном внутри строки html, если совпадение не между тегами IMG

У меня есть шаблон, который выбирает телефонные номера в боксе HTML, и он отлично работает (я использую его, чтобы заставить номера показывать только тогда, когда нажмите на «Показать» номер »с div, обертывание числа с« preg_replace »).

$pattern = '!(\b\+?[0-9()\[\]./ -]{7,17}\b|\b\+?[0-9()\[\]./ -]{7,17}\s+(extension|x|#|-|code|ext)\s+[0-9]{1,6})!i';

Проблема в том, что он выбирает числа внутри тегов IMG A.

Например: domain.com/images/09/2015, будет выбран номер «09/2015».

Или ссылка domain.com/2015/09 «2015/09» будет выбрана по шаблону.

Как я могу установить шаблон не внутри этих тегов?

Это не вопрос, как извлечь данные из HTML. Я знаю, что есть несколько других способов. Сценарий работает и соответствует числам, которые мне нужны. Мой вопрос заключается в том, как я могу расширить шаблон в этом сценарии, чтобы не включать совпадения между тегами IMG.

0

Решение

Я решил это с помощью php_simple_dom следующим образом:

require ("simple_html_dom.php");
$html = str_get_html($content);
$content = '';
foreach ( $html->find('p') as $line){
if(strpos($line,'<a') == false && strpos($line,'<img') == false &&   strpos($line,'< img') == false && strpos($line,'< a') == false) {
$content .= preg_replace($pattern, $part_1_before_phone_href .'$1' .$part_2_after_phone_href . $show_number_text . $part_3_close_tag ,$line);
}
else {
$content .= $a;
}
}
1

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

Других решений пока нет …

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