简述Java正则表达式贪婪与懒惰 ?
参考答案:
在Java正则表达式中,"贪婪"和"懒惰"是描述量词(quantifiers)行为的两个术语。量词是用来指定正则表达式中某个元素出现的次数的。
贪婪量词:
贪婪量词会尽可能多地匹配字符。在Java正则表达式中,常见的贪婪量词有:
*
:匹配前面的元素零次或多次。+
:匹配前面的元素一次或多次。?
:匹配前面的元素零次或一次。{n,}
:匹配前面的元素至少n次。{n,m}
:匹配前面的元素至少n次,但不能超过m次。
例如,正则表达式 a*b
会匹配尽可能多的 a
,然后匹配一个 b
。在字符串 "aaab" 中,它会匹配整个 "aaab"。
懒惰量词:
懒惰量词会尽可能少地匹配字符。在Java正则表达式中,通过在贪婪量词后面加上一个问号 ?
,就可以将其转变为懒惰量词。例如:
*?
:匹配前面的元素零次或多次,但尽量少匹配。+?
:匹配前面的元素一次或多次,但尽量少匹配。??
:匹配前面的元素零次或一次,但尽量少匹配。{n,}?
:匹配前面的元素至少n次,但尽量少匹配。{n,m}?
:匹配前面的元素至少n次,但不能超过m次,但尽量少匹配。
在字符串 "aaab" 中,正则表达式 a*?b
会匹配最少的 a
,即一个 a
,然后匹配一个 b
,所以它会匹配 "aab"。
理解贪婪和懒惰量词对于编写正确的正则表达式非常重要,因为它们在处理复杂模式时可能会导致截然不同的结果。