正则表达式:[jpg|jpeg|png|bmp|gif]*是什么意思

<?php
$str='&lt;p&gt;32323223&lt;img src=&quot;/Upload/image/ueditor/20180222/1519283654325793.jpg&quot; title=&quot;1519283654325793.jpg&quot; alt=&quot;beian.jpg&quot;/&gt;&lt;/p&gt';

//这个正则表达式中“[jpg|jpeg|png|bmp|gif]*”这个部分是什么意思?
$preg='/\/Upload\/image\/ueditor\/\d*\/\d*\.[jpg|jpeg|png|bmp|gif]*/i';

preg_match($preg, $str,$data);
var_dump($data); //这里能匹配出jpg等后缀 结果如下:array(1) { [0]=> string(51) "/Upload/image/ueditor/20180222/1519283654325793.jpg" }
//但是正则中[] 中括号内的字符,应该只能匹配所包含的任意一个字符的啊,为什么能把jpg整个匹配出来?



阅读 5.6k
3 个回答

典型的正则表达式中[]的错误用法

[]只能匹配一个字符,里面是所有可以匹配成功的字符集合,*是匹配前面的表达式[0,∞)次。

j、p、g都是[]里面的字符,所以每个字符都可以匹配成功,又因为[]后面是*,所以进行了匹配多次分别命中了单个字符

测试可以证明

||||||
|j|jbmpj
b|m|p
jeppngjpg
pmb
gpj

这些都可以匹配成功

$preg='//Upload/image/ueditor/d/d.[jpg|jpeg|png|bmp|gif]*/i';
这个是正则是以'/Upload/image/ueditor/'开始的,
d*是指多次匹配数字,就是匹配一段数字,
[jpg|jpeg|png|bmp|gif]*是指匹配这个后缀多次,可以是jpg,也可以是jpgjpg

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题