正则表达式中量词符号(如*、+、?、{n}等)必须紧跟在可量化元素后,用于控制其重复次数,本身不匹配内容;默认贪婪匹配,加?转为非贪婪;需配合锚点或断言避免空匹配等问题。

正则表达式中量词符号用于控制前面一个元素(字符、字符集、分组等)的重复次数。它不是独立存在的,必须紧跟在某个可重复的单元之后,否则语法错误。
量词必须跟在可量化元素后面
量词本身不匹配任何内容,只修饰它左边紧邻的那个元素。例如:
-
a*:匹配a字符,0 次或多次 -
\d+:匹配一个数字,1 次或多次 -
[aeiou]?:匹配任意一个元音字母,0 次或 1 次 -
(ab){2}:匹配ab这个整体,恰好 2 次
⚠️ 错误写法如 *a 或 +{3} 是无效的——量词不能放在开头,也不能直接跟另一个量词。
常用量词及其含义
-
*:等价于{0,},匹配 0 次或多次 -
+:等价于{1,},匹配 1 次或多次 -
?:等价于{0,1},匹配 0 次或 1 次 -
{n}:精确匹配 n 次 -
{n,}:至少匹配 n 次 -
{n,m}:匹配 n 到 m 次(含两端)
比如:
-
\d{4}-\d{2}-\d{2}匹配2025-07-07这类日期 -
https?://中的s?表示s可有可无,能同时匹配http://和https:// -
colou?r匹配color或colour
贪婪与非贪婪:加 ? 改变匹配行为
默认所有量词都是贪婪的(尽可能多匹配),在量词后加 ? 可转为非贪婪(懒惰)模式:
-
.*在<div>hello</div>中会匹配整个<div>hello</div> -
.*?则只匹配<div>(遇到第一个 <code>>就停)常见非贪婪写法:
-
*?:0 次或尽可能少的多次 -
+?:1 次或尽可能少的多次 -
??:优先不匹配(即匹配 0 次) -
{n,m}?:匹配最少次数(如{2,5}?优先试 2 次)
注意边界和空匹配问题
某些量词(尤其是
*)可能产生空字符串匹配,需谨慎使用:-
a*在字符串"bb"中会匹配三次空字符串(位置 0、1、2 各一次) - 实际开发中常配合锚点(
^、$)或断言(\b、(?=...))来限定上下文,避免意外匹配
例如:
-
^\d{6}$确保整个字符串是且仅是 6 位数字 -
\b\d{3}-\d{4}-\d{4}\b更安全地匹配手机号,避免嵌在长数字串中
-











