У меня есть шаблон, который выбирает телефонные номера в боксе 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.
Я решил это с помощью 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;
}
}
Других решений пока нет …