2017-03-15 1 views
-1

Webページのスクラップから得られる以下のような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; 
    } 
    
  • それはする必要がありますどのように信頼性に応じて、次の2つの選択肢(単なるサンプルコード、実際にテストしていない)を持っています

数えるには、たとえば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

解決に感謝します。それは正常に動作しています。 –

関連する問題