1

こんにちは、私のパターンは次のとおりです。

'<span\s+id="bodyHolder_newstextDetail_nwstxtPicPane"><a\s+href="(.*)"\s+target="_blank"><img\s+alt="(.*)"\s+title="(.*)"\s+src=\'(.*)\'\s+/>'

そして文字列:

<div class="nwstxtpic">
                        <span id="bodyHolder_newstextDetail_nwstxtPicPane"><a href="xxxxx" target="_blank"><img alt="xxxxx" title="xxxxx" src='xxxxx' />

さて、私がパターンで定義した4つのグループの値を見つけて取得するための私のphpコードは次のとおりです。

$picinfo=preg_match_all('/<span\s+id="bodyHolder_newstextDetail_nwstxtPicPane"><a\s+href="(.*)"\s+target="_blank"><img\s+alt="(.*)"\s+title="(.*)"\s+src=\'(.*)\'\s+/>/',$newscontent,$matches);
foreach ($matches[0] as $match) {
    echo $match;
}

これらの4つのグループの価値を得る方法がわかりません

href="(.*)"

alt="(.*)"

title="(.*)"

src=\'(.*)\'

助けてくれませんか?ありがとうございました。

4

2 に答える 2

6

preg_match_all()はデフォルトで結果をパターン順に返しますが、これはあまり便利ではありません。PREG_SET_ORDERフラグを渡して、データがより論理的な方法で配置されるようにします。

$newscontent='<span id="bodyHolder_newstextDetail_nwstxtPicPane"><a href="xxxxx" target="_blank"><img alt="xxxxx" title="xxxxx" src=\'xxxxxbb\' />'; 

$picinfo=preg_match_all('/<span\s+id="bodyHolder_newstextDetail_nwstxtPicPane"><a\s+href="(.*)"\s+target="_blank"><img\s+alt="(.*)"\s+title="(.*)"\s+src=\'(.*)\'\s+\/>/',$newscontent,$matches,PREG_SET_ORDER);
foreach ($matches as $match) {
    $href = $match[1];
    $alt = $match[2];
    $title = $match[3];
    $src = $match[4];
    echo $title;
}
于 2012-08-13T11:05:43.813 に答える
1

マニュアルに記載されているように、正規表現は正しいです。デフォルトPREG_PATTERN_ORDERでは、結果を順序付けて$matches[0]、完全なパターン一致$matches[1]の配列、最初の括弧で囲まれたサブパターンと一致する文字列の配列などになります。

したがって、あなたの場合のように、$ matches 1にはhrefが含まれ、$matches2にaltが含まれます。好き、

for($i = 0; $i <= count($matches[0]); $i++ )
     echo "href = {$matches[1][$i]}, alt = {$matches[2][$i]}";

$matches[0]完全に一致した文字列が含まれます。

ところで、XMLパーサーを使用することを常にお勧めします。DOMDocumentを試してください。義務的です。

于 2012-08-13T11:03:22.067 に答える