限定符

在上一小节中的表格中,我们知道 . 可以匹配除换行符以外的任意字符,使用.匹配下列文本:

expression  

但是.每次只匹配一个字符,如果想一次匹配多个,则要使用限定符

限定符 作用
* 匹配零次或多次
+ 匹配一次或多次
? 匹配零次或一次
{3} 匹配三次
{3,5} 匹配三到五次
{3,} 匹配三次或以上

下面通过实例了解限定符的区别。 es 的匹配结果

expression  

es+ 的匹配结果(e,一个或多个 s)

expression

es* 的匹配结果(e,零或多个 s)

expression  

es? 的匹配结果(e,零或一个 s)

expression  

贪婪与懒惰

使用限定符进行匹配时,默认匹配尽可能多的字符。无论用 .* 还是 .+ 匹配下列文本,都会匹配全部

expression    

这种方式称为“贪婪模式”。在限定符之后加 ? 则匹配尽可能少的字符,称为“懒惰模式”[49]

例如,使用贪婪模式a.+b匹配:

aaabab    

使用懒惰模式a.+?b匹配:

aaabab    


[49] .+ 匹配一个或多个任意字符,在贪婪模式中,它匹配尽可能多的字符;而懒惰模式中(.+?),则只匹配一个字符;.{3,5}在贪婪模式中尽可能匹配5个字符,在懒惰模式中(.{3,5}?)只匹配3个字符;?* 这样可以匹配零次的限定符,在懒惰模式下不匹配任何字符(.*?.??)