如何在正则表达式中切换贪婪模式和非贪婪模式?
在正则表达式中,可以通过在量词(如*
、+
、?
、{m,n}
等)后面添加?
来切换到非贪婪模式。如果没有这个?
,则通常处于贪婪模式。
以下是一些示例:
*一、使用星号(``)**
- 贪婪模式:
- 正则表达式:
a.*b
- 对于字符串
aaabaaaab
,这个正则表达式在贪婪模式下会匹配整个aaabaaaab
,因为.*
会尽可能多地匹配字符,直到遇到最后一个b
。
- 正则表达式:
- 非贪婪模式:
- 正则表达式:
a.*?b
- 对于同样的字符串
aaabaaaab
,在非贪婪模式下,它会匹配第一个aaab
,因为.*?
会尽可能少地匹配字符,一旦遇到第一个b
就停止匹配。
- 正则表达式:
二、使用加号(+
)
- 贪婪模式:
- 正则表达式:
a.+b
- 对于字符串
aaabaaaab
,贪婪模式下会匹配aaabaaaab
,因为.+
会尽可能多地匹配a
,直到遇到最后一个b
。
- 正则表达式:
- 非贪婪模式:
- 正则表达式:
a.+?b
- 对于同样的字符串,非贪婪模式下会匹配
aaab
,因为.+?
会在遇到第一个b
时就停止匹配尽可能少的a
。
- 正则表达式:
三、使用花括号({m,n}
)
- 贪婪模式:
- 正则表达式:
a{2,5}b
- 对于字符串
aaaaab
,贪婪模式下会匹配aaaaab
,因为a{2,5}
会尽可能多地匹配a
,这里匹配了五个a
,直到遇到b
。
- 正则表达式:
- 非贪婪模式:
- 正则表达式:
a{2,5}?b
- 对于同样的字符串,非贪婪模式下会匹配
aaab
,因为a{2,5}?
会尽可能少地匹配a
,满足至少两个a
后遇到b
就停止。
- 正则表达式: