[WeChall] Training: Regex (Training, Regex) 的答案
前言
如果下面的看不懂。那么就需要学习下基本知识:正则表达式30分钟入门教程
Level 1
匹配一个空字符串,学习匹配匹配字符串开头结尾的两个符号:/^$/
^ 匹配字符串的开始
$ 匹配字符串的结束
Level 2
匹配”wechall”,/^wechall$/
Level 3
匹配以wechall或wechall4为文件名,并以.jpg/.gif/.tiff/.bmp/.png
为后缀的图像,
/^wechall4?\.(?:jpg|gif|tiff|bmp|png)$/
? 重复零次或一次
所以4?表示重复0次或1次4,也就是wechall和wechall4都可以匹配。
\. 转义
使用\
来取消.
字符的特殊意义,来显示.
字符本身
(?:jpg|gif|tiff|bmp|png)\
(?:exp)
表示非捕获分组,匹配exp,不捕获匹配的文本,也不给此分组分配组号。
为什么要用(?:exp)
,而不用(exp)
呢?因为直接提交/^wechall4?\.(jpg|gif|tiff|bmp|png)$/
会报错:
Your pattern would capture a string, but this is not wanted. Please use a non capturing group.
您的模式将捕获一个字符串,但这是不需要的。请使用非捕获组。
所以需要使用(?:exp)
非捕获分组。
至于(?:jpg|gif|tiff|bmp|png)\
中的|
表示分枝条件
Level 4
捕获文件名,需要对文件名添加捕获分组:
/^(wechall4?)\.(?:jpg|gif|tiff|bmp|png)$/
(wechall4?)
用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作。
参考:
Wechall WriteUp - 琪琪的博客 | Qiqi's Blog
WeChall Journal | 陈文青