«

如何在正则表达式中切换贪婪模式和非贪婪模式?

瑞瑞瑞 发布于 阅读:244 技术分享


在正则表达式中,可以通过在量词(如*+?{m,n}等)后面添加?来切换到非贪婪模式。如果没有这个?,则通常处于贪婪模式。

以下是一些示例:

*一、使用星号(``)**

  1. 贪婪模式:
    • 正则表达式:a.*b
    • 对于字符串aaabaaaab,这个正则表达式在贪婪模式下会匹配整个aaabaaaab,因为.*会尽可能多地匹配字符,直到遇到最后一个b
  2. 非贪婪模式:
    • 正则表达式:a.*?b
    • 对于同样的字符串aaabaaaab,在非贪婪模式下,它会匹配第一个aaab,因为.*?会尽可能少地匹配字符,一旦遇到第一个b就停止匹配。

二、使用加号(+

  1. 贪婪模式:
    • 正则表达式:a.+b
    • 对于字符串aaabaaaab,贪婪模式下会匹配aaabaaaab,因为.+会尽可能多地匹配a,直到遇到最后一个b
  2. 非贪婪模式:
    • 正则表达式:a.+?b
    • 对于同样的字符串,非贪婪模式下会匹配aaab,因为.+?会在遇到第一个b时就停止匹配尽可能少的a

三、使用花括号({m,n}

  1. 贪婪模式:
    • 正则表达式:a{2,5}b
    • 对于字符串aaaaab,贪婪模式下会匹配aaaaab,因为a{2,5}会尽可能多地匹配a,这里匹配了五个a,直到遇到b
  2. 非贪婪模式:
    • 正则表达式:a{2,5}?b
    • 对于同样的字符串,非贪婪模式下会匹配aaab,因为a{2,5}?会尽可能少地匹配a,满足至少两个a后遇到b就停止。