正则表达式


量词

这三个都是正则表达式的量词,量词,顾名思义,就是表示出现数量多少次的词语;

  • *表示匹配前面的元素零次或多次。例如,a* 表示匹配零个或多个连续的字母 a。
  • +表示匹配前面的元素一次或多次。例如,a+ 表示匹配一个或多个连续的字母 a。
  • {m,n} 表示匹配前面的元素至少 m 次,至多 n 次。例如,a{2,4} 表示匹配连续的字母 a,至少 2 次,至多 4 次。

专门针对量词的贪婪匹配和非贪婪匹配

概念

贪婪匹配和非贪婪匹配是正则表达式中量词(如 *、+、?、{m,n} 等)的匹配行为。

- 贪婪匹配:贪婪匹配会尽可能多地匹配符合条件的字符。也就是说,它会尽量延伸匹配的范围,使得整个正则表达式能够成功匹配。例如,对于正则表达式 `a.*b`,如果待匹配的字符串是 "aabab",贪婪匹配会从第一个字母 a 开始,一直匹配到最后一个字母 b,而不是在第一个字母 a 后面的第一个字母 b 处停止匹配。

- 非贪婪匹配(也称为懒惰匹配或最小匹配):非贪婪匹配会尽可能少地匹配符合条件的字符。也就是说,它会尽量缩小匹配的范围,使得整个正则表达式能够成功匹配。非贪婪匹配可以通过在量词后面添加一个问号 `?` 来实现。例如,对于正则表达式 `a.*?b`,如果待匹配的字符串是 "aabab",非贪婪匹配会从第一个字母 a 开始,只匹配到第一个字母 b 处,而不是一直匹配到最后一个字母 b。

贪婪匹配和非贪婪匹配的选择取决于你对匹配结果的期望。如果你希望匹配尽可能多的字符,以满足整个正则表达式的条件,就使用贪婪匹配。如果你希望匹配尽可能少的字符,只满足最基本的条件,就使用非贪婪匹配。

量词的默认是否贪婪

需要注意的是,并非所有的量词都支持非贪婪匹配。例如,`+` 和 `*` 和 `{m,}` 默认是贪婪匹配的,而 `?` 和 `{m,n}` 和’{m,}?‘默认是非贪婪匹配的。

但是你可以通过在量词后面添加问号 `?` 来改变默认的匹配行为。

 

posted @ 2023-06-28 11:16  Eric-Shen  阅读(9)  评论(0编辑  收藏  举报