目标:匹配jpg和png格式的图片。并且只匹配一次就好。
含有图片地址的字符串如下:
$str = string(156) "a:3:{i:0;s:38:"uploads/image/20210907/1631007647.jpg,";i:1;s:38:"uploads/image/20210907/1631016620.jpg,";i:2;s:38:"uploads/image/20210907/1631014044.jpg,";}"
第一种:使用(jpg|png)来选择匹配图片格式
preg_match_all("#uploads/image/[0-9]+\/[0-9]+\.(jpg|png)#", $str, $match);
$i = 1;
foreach ($match as $item1) {
echo "{$item1}<br>";
foreach ($item1 as $item_i) {
echo "{$item_i}----{$i}<br>";
$i++;
}
}
##备注:
1.定界符我是用#,使用“/”做定界符时,汇报错的。
2、preg_match_all:一直匹配到字符串的最后。
2、preg_match: 只匹配一次就停止后面的匹配了。
匹配结果如下:匹配了一次整体结果后。又匹配了一次小括号(jpg|png)的内容了。
Array
uploads/image/20210907/1631007647.jpg----1
uploads/image/20210907/1631016620.jpg----2
uploads/image/20210907/1631014044.jpg----3
Array
jpg----4
jpg----5
jpg----6
第二种:使用 【jpg|png】来选择匹配图片格式
注意:这里时候两个【】来匹配 jpg和png前面两个不同的字符,且对应位置。
preg_match_all("#uploads/image/[0-9]+\/[0-9]+\.[j|p][p|n]g#", $row['picarr'], $match);
$i = 1;
foreach ($match as $item1) {
echo "{$item1}<br>";
foreach ($item1 as $item_i) {
echo "{$item_i}----{$i}<br>";
$i++;
}
}
匹配结果如下:我们看到结果就不会匹配第二次了。
Array
uploads/image/20210907/1631007647.jpg----1
uploads/image/20210907/1631016620.jpg----2
uploads/image/20210907/1631014044.jpg----3
综上得知:
1、使用(jpg|【png)匹配。由于()会把小括号的内容当成了一个单独的组。因此在匹配完外面整体之后,再对这个分组进行二次匹配。
2、使用【】匹配。一个【】,只能匹配【】中的一个字符。因此匹配两个不同字符时,需要使用两个【】。
知识补充:
一、括号字符()的作用:
(1)第一个作用就是可以改变限定符的作用范围,如“|”、“*”、“^”等。
(2)第二个作用就是分组,也就是子表达式。如 (\.[0-9]{1,3}){2},就是对分组(\.[0-9]{1,3})进行重复匹配操作。
二、中括号【】的作用:
教材中这个括号是字符类。只要匹配的字符出现在方括号内,即可表示匹配成功。但是一个方括号只能匹配一个字符。因此在在匹配jpg和png三个字符时,需要使用两个【】来匹配前面两个不同的字符。第三个字符都是相同的“g”
|