扩展正则是相对于基本正则表达式而言,提供了更多的特殊符号和功能,其中量词是用于指定匹配项重复次数的关键元素。在扩展正则表达式中,常见的量词包括但不限于以下几个:
*
(星号):匹配前面的表达式零次或多次。例如,a*b
可以匹配 "b", "ab", "aab", "aaab", 甚至是空字符串。+
(加号):匹配前面的表达式一次或多次。例如,a+b
可以匹配 "ab", "aab", "aaab",但不会匹配 "b"。?
(问号):匹配前面的表达式零次或一次。例如,a?b
可以匹配 "b" 或 "ab",但不会匹配 "aab"。{m,n}
:匹配前面的表达式至少 m 次,至多 n 次。例如,a{2,3}
可以匹配 "aa", "aaa",但不会匹配 "a" 或 "aaaa"。{m}
:匹配前面的表达式恰好 m 次。例如,a{3}
只会匹配 "aaa"。
在某些正则表达式引擎中,特别是那些支持 Unicode 属性转义和 Unicode 字符集的现代引擎(如JavaScript ES6及以后版本),使用 u
修饰符可以启用对Unicode字符的正确解析,这时量词也会相应地应用于Unicode字符,而不仅仅是单个字节或ASCII字符。
另外,正则表达式的贪婪和懒惰模式也与量词有关:
- 贪婪模式:默认情况下,量词尽可能多地匹配字符。
- 懒惰(或非贪婪)模式:通过在量词后面添加
?
,使其变为懒惰模式,如*?
,+?
,{m,n}?
,这样量词会在找到第一个满足条件的匹配后停止匹配,而不是尝试匹配最长可能的子串。