我正在尝试从网页获取所有图片代码的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
的一部分让我感到困惑。你能告诉我这个吗?
答案 0 :(得分:4)
你可以忽略它,因为它属于数组中的另一个索引。
或者您可以将捕获组(pattern)
更改为非捕获组(?:pattern)
:
'/src="?.+\.(?:gif|jpg|png|jpeg)"/'
除了找到与整个正则表达式匹配之外,您当前的正则表达式还“捕获”(即记住)正则表达式gif|jpg|png|jpeg
匹配的文本,因为捕获组()
周围的效果它。非捕获组将保留分组属性,但不会捕获子表达式gif|jpg|png|jpeg
匹配的文本。
preg_match_all
输出一个二维数组,其中第一个维度是捕获组(索引0将包含整个正则表达式匹配的文本),第二个维度是它找到的匹配项的id