2017-03-15 22 views
-1

我有一部分HTML字符串,如下所示,我从网页抓取中获得。使用PHP preg函数查找html标签之间的特定非字母数字字符的数量

$scraping_html = "<html><body> 
.... 
<div id='ctl00_ContentPlaceHolder1_lblHdr'>some text here with &. some text here.</div> 
....</body></html>"; 

我想用PHP采取的特定的div之间&计数。是否有可能使用任何PHP preg函数?提前致谢。

+0

你绝对需要使用正则表达式?这可能是最困难的方法。 –

+0

@ÁlvaroGonzález只使用正则表达式不是强制性的。我相信使用正则表达式我们可以用较少的代码实现它。 –

回答

1

困难的部分是获取文本节点(我认为这是你卡住的地方)。这取决于它如何可靠必须是你有两个选择(只是示例代码,没有实际测试过):

  • 好老strip_tags()

    $plain_text = strip_tags($scraping_html); 
    
  • 正确DOM parser

    $dom = new DOMDocument(); 
    libxml_use_internal_errors(true); 
    $dom->loadHTML($scraping_html); 
    libxml_use_internal_errors(false); 
    $xpath = new DOMXPath($dom); 
    $plain_text = ''; 
    foreach ($xpath->query('//text()') as $textNode) { 
        $plain_text .= $textNode->nodeValue; 
    } 
    

要计数,你有例如substr_count()

+0

@Alvoro感谢您的多种解决方案。你的解决方案也能正常工作 –

1

要获得&在给定的例子的数量,使用的DOMDocument:

$html = <<<EOD 
<html><body> 
<div id='ctl00_ContentPlaceHolder1_lblHdr'>some text here with &. some text here.</div> 
</body></html> 
EOD; 

$dom = new DOMDocument; 
$dom->loadHTML($html); 
$ele = $dom->getElementById('ctl00_ContentPlaceHolder1_lblHdr'); 
echo substr_count($ele->nodeValue, '&'); 
+0

感谢您的解决方案。它工作正常。 –

相关问题