在正则表达式中,包括.
通配符和*
通配符:
点号.
可以匹配一个任意字符,仅1次。
星号*
可以复制它之前那个字符任意次数,包括0次,即[0, +∞]次。
举例1:
模式串P:.a*m
文本串S:zaaam
匹配结果:成功
原因:
P的.
匹配S的z,
P的*
复制了3次P的a 去匹配了S的3个a,
P的m匹配了S的m
举例2:
模式串P:.a*m
文本串S:cm
匹配结果:成功
原因:
P的.
匹配S的c,
P的*
复制了0次P的a (相当于a被*
消除了)
P的m匹配了S的m
举例3:
模式串P:a.a
文本串S:aaa
匹配结果:成功
原因:
P的a匹配S的a,
P的.
匹配了S的a
P的a匹配了S的a
举例4:
模式串P:am*ac*a
文本串S:aaa
匹配结果:成功
原因:
P的a匹配S的a,
P的*
复制了0次P的m(消除m)
P的a匹配了S的a
P的*
复制了0次P的c(消除c)
P的a匹配了S的a
举例5:
模式串P:aa.a
文本串S:amna
匹配结果:失败
原因:
第一步P的a匹配S的a虽然是成功的,
但是第二步P的a必须只能匹配S的m ,因为它后边是.
而a不等于m,所以匹配失败了。
最牛的是下方这个:
举例6:
模式串P:.*
文本串S:随便什么文本
匹配结果:成功
原因:
P的*
可以复制任意个P的.
来匹配S串,
因为一个.
可以匹配一个任意字符,
比如模式串.
可以匹配文本串a或m或c,而.
是P中的*
复制了1个.
而来的。
比如模式串..
可以匹配文本串ab或mc或cc,而..
是P中的*
复制了2个.
而来的。
比如模式串...
可以匹配文本串aaa或amc或acc,而...
是P中的*
复制了3个.
而来的。
比如模式串....
可以匹配文本串aaaa或amcd或accd,而....
是P中的*
复制了4个.
而来的。
更多推荐
正则表达式 .* (正确理解通配符.和通配符*)
发布评论