PHP - 正则表达式设置模式以匹配html字符串中的模式,除非匹配在A IMG标记之间

时间:2015-12-28 20:26:43

标签: php regex preg-replace phone-number

我有一个模式,用html的bock选择电话号码,它的作品很完美(我用它来制作数字只在点击“显示”数字时显示“用div将数字换成”preg_replace“。< / p>

$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中提取数据的问题。我知道还有其他一些方法。该脚本工作并匹配我需要的数字。我的问题是如何扩展此脚本中的模式以不包括A IMG标记之间的匹配。

1 个答案:

答案 0 :(得分:1)

我在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;
  }
}