0

私はphpでいくつかの正規表現を実行し、preg_match()を使用してマッチングを行っています。

次のようなテキストがあります。

 $imy = "...without sophisticated apparatus<div class="caption"><div class="caption-inner">
 <img src="http://dev.mysite.org/Heatmap.png" alt="" title="" class="image-thumbnail" />
 Caption text</div></div>Some more text...
 <img src="http://dev.mysite.org/Heatmap.png" alt="" title="" class="image-thumbnail" />blablah..."

私の目標は、「div」タグ(「div」タグを含む)で囲まれた「img」タグ、またはdivで囲まれていない場合は「img」だけを選択することです。また、いずれの場合も、「img」タグのsrc属性に含まれているアドレスをキャプチャしたいと思います。

これは私が使用するパターンです:

$imagepattern = '/<div class="caption-inner[^>]+>.*<img\b[^>]*\bsrc="([^">]*)"[^>]*>.*<\/div>(<\/div>)?|<img\b[^>]*\bsrc="([^">]*)"[^>]*>/Us';

「div」で囲まれた画像には最適ですが、divがない画像の場合、キャプチャされたサブパターンに対して奇妙な結果が得られます。

preg_matchを繰り返し呼び出し、件名の文字列から一致を削除してから、preg_matchに再送信します。preg_matchの呼び出しは次のようになります。

preg_match($imagepattern,$imy,$image,PREG_OFFSET_CAPTURE)

divless画像タグと照合したときに画像配列に表示されるものは次のようになります。

$image = [0] => Array
        (
            [0] => <img src="http://dev.molmeth.org/Heatmap.png" alt="" title="" class="image-thumbnail" />
            [1] => 1
        )

    [1] => Array
        (
            [0] =>
            [1] => -1
        )

    [2] => Array
        (
            [0] =>
            [1] => -1
        )

    [3] => Array
        (
            [0] => http://dev.mysite.org/Heatmap.png
            [1] => 11
        )

$ image配列に「2」キーと「3」キーを設定するにはどうすればよいですか?サブパターンは1つだけではありませんか?これはどういうわけか、パターンの「または」条件が原因ですか?

4

1 に答える 1

0

preg_match式には、3つのキャプチャグループがあります。

または(divに含まれる画像またはdivlessの画像を検索するため)により、式全体が一致します

divless画像の場合、キャプチャグループ3のみがデータで埋められ、キャプチャグループ1と2は空になります。

于 2012-08-10T09:43:46.920 に答える