1

Webページからすべての画像タグのsrcを取得しようとしています。しかし、括弧内のパターンを一致させない方法については混乱しています。この場合gif|jpg|png|jpeg

$img_src_pattern = '/src="?.+\.(gif|jpg|png|jpeg)"/';
preg_match_all($img_src_pattern, $contents, $img_matches);

したがって、印刷する$img_matchesと、次のような配列が得られます。

Array ( 
  [0] => Array ( 
    [0] => src="http://s9.addthis.com/button1-bm.gif" 
    [1] => src="http://s9.addthis.com/button1-bm.gif" ) 
  [1] => Array ( [0] => gif [1] => gif ) 
)

そして、これが私が欲しいものです:

Array ( 
  [0] => Array ( 
    [0] => src="http://s9.addthis.com/button1-bm.gif" 
    [1] => src="http://s9.addthis.com/button1-bm.gif" ) 
)

これは本当にpreg_match私を混乱させる部分です。これについて教えてもらえますか?

4

1 に答える 1

5

配列内の別のインデックスに属しているため、無視してかまいません。

(pattern)または、キャプチャグループを非キャプチャグループに変更できます(?:pattern)

'/src="?.+\.(?:gif|jpg|png|jpeg)"/'

現在の正規表現は、正規表現全体との一致を見つけることは別として、周囲gif|jpg|png|jpegのグループをキャプチャする効果により、正規表現と一致するテキストを「キャプチャ」(つまり記憶)します。()非キャプチャグループはグループ化プロパティを保持しますが、部分式と一致するテキストはキャプチャしませんgif|jpg|png|jpeg

preg_match_all2次元配列を出力します。ここで、最初の次元はキャプチャグループ(インデックス0には正規表現全体と一致するテキストが含まれます)、2番目の次元は検出された一致のIDです。

于 2013-03-11T13:17:52.703 に答える