PHP preg_match_all html标记内容搜索

时间:2013-11-13 22:49:51

标签: php regex preg-match-all

我有一个问题,我想在文本的html标签中计算符号数。

文字示例1:

Hello <b>world</b>, <i>stackoverflow</i>

文字示例2:

Hello <b>world, <i>stackoverflow</i></b>

因此,我需要分别计算 b i 中的符号数量。

我这样做了:

preg_match_all('#<(b|i)>(.*)<\/(b)>#Uusi', $temp, $tags_check);

foreach($tags_check[2] as $val)
{
    if(mb_strlen($val) > 50)
    {
        $errors = 'error';
        break;
    }
}

但它只适用于第一个例子,在第二个例子中我需要用regexp做一些事情。我需要在开始 b 和结束 b 时搜索,但不要在开始 b 和结束 i 时搜索,我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

DOM + XPath实现这一目标的方法:

$html = 'Hello <b>world</b>, <i>stackoverflow</i>';
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$error_nodes = $xpath->query('//b[string-length(text()) > 50]|//i[string-length(text()) > 50]');

foreach ($error_nodes as $node) {
    print $node->nodeValue;
}
祝你好运!