web-dev-qa-db-ja.com

htmlタグ間のphp内のテキストに一致するPreg

こんにちは、preg_match in PHPを使用して、HTMLドキュメントから以下の「望ましいテキスト」を解析します。

<p class="review"> Desired text </p>

通常、私はそのようなことのためにsimple_html_domを使用しますが、この機会には使用できません(上記の要素はすべての必要なdivタグに表示されないため、このアプローチを使用して、表示されない正確な時間を追跡しなければなりませんそれに応じてsimple_html_domから配列を調整します)。

とにかく、これは私の問題を解決するでしょう。

本当にありがとう。

20
David Willis
preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match);
if($match) echo "result=".$match[1];
67
serg

複数の一致を返す場合は、preg_match_all()を使用する必要があります。次に、2番目の結果グループ($ match [1])をループして、タグ間のコンテンツのみを取得します。

$source = "<p class=\"review\"> Desired text1 </p>".
"<p class=\"review\"> Desired text2 </p>".
"<p class=\"review\"> Desired text3 </p>";


    preg_match_all("'<p class=\"review\">(.*?)</p>'si", $source, $match);

    foreach($match[1] as $val)
    {
        echo $val."<br>";


    }

Outputs:

Desired text1
Desired text2
Desired text3 
11
Andy N

一致する文字列に複数の行があり、次の場合:

<p class="review"> Desired text1 </p>
<p class="review"> Desired text2 </p>
<p class="review"> Desired text3 </p>

そのパターンは1回一致し、一致は文字列内のすべてになります。

より良いパターンは次のとおりです。

"'<p class=\"review\">([^<]*)</p>'si"
7
Ross Snyder