0

お願いします、2 つの同じ要素の間のすべての文字列を取得したい (strong と /strong の間ではなく、strong のみ)。

文字列の例:

<strong>NAME1</strong><br />Some text, some text<br />
<strong>NAME2</strong><br />Some text2, some text2<br />
<strong>NAME3</strong><br />Some text3, some text3<br />

私はこれを試します:

preg_match_all("'<strong>(.*?)<strong>'si", $text, $match);

しかし、結果は次のとおりです。

<strong>NAME1</strong><br />Some text, some text<br /><strong>
<strong>NAME3</strong><br />Some text3, some text3<br />

,,NAME2" に ,,some text2" がありません。なぜですか?

どうもありがとう、よろしく、ルーカス

4

1 に答える 1

0

彼が来るポニー

それはさておき、ここにパーサー コードを入れてみませんか?

$dom = new DOMDocument();
$dom->loadHTML($text);
$bodychlldren = $dom->getElementsByTagName('body')->item(0)->childNodes;
$outputtags = array();
$currentTag = null;
$count = $bodychildren->length;
for( $i=0; $i<$l; $i++) {
    $node = $bodychildren->item($i);
    if( strtolower($node->nodeName) == "strong") {
        if( $currentTag !== null) $outputtags[] = $currentTag;
        $currentTag = "";
    }
    if( $node->nodeType == XML_ELEMENT_NODE) $currentTag .= $dom->saveHTML($node);
    else $currentTag .= $node->nodeValue;
}
if( $currentTag) $outputtags[] = $currentTag;

それは実際には私が思っていたよりも醜いです。は。

本当に正規表現を使いたい場合は、これを試してみてください:

"(<strong>(.*?)(?=<strong>))si"

これにより、次の が検索されます<strong>が、一致に含まれないため、NAME2表示されます。

于 2013-10-23T23:01:55.537 に答える