在 Java 正则表达式里,量词(Quantifier)用来指定前面的字符或子表达式可以出现多少次。理解量词是写好正则的关键。
下面从「是什么 → 有哪些 → 怎么用 → 贪心/懒惰/独占」一步一步说。
正则表达式中的量词,作用对象是它前面紧邻的一个字符或一个分组。
例如:
a* // a 出现 0 次或多次
ab+ // b 出现 1 次或多次
| 量词 | 含义 | 示例 | 匹配 |
|---|---|---|---|
* |
0 次或多次 | a* |
"", a, aa |
+ |
1 次或多次 | a+ |
a, aa |
? |
0 次或 1 次 | a? |
"", a |
{n} |
恰好 n 次 | a{3} |
aaa |
{n,} |
至少 n 次 | a{2,} |
aa, aaa |
{n,m} |
n 到 m 次 | a{2,4} |
aa, aaa, aaaa |
String regex = "a+";
System.out.println("aaa".matches(regex)); // true
注意:
String.matches() 是全量匹配Pattern + MatcherPattern p = Pattern.compile("\\d{3}");
Matcher m = p.matcher("abc123def");
while (m.find()) {
System.out.println(m.group());
}
"a{2,3}" // a 出现 2~3 次
"(ab){2}" // abab
"[a-z]+" // 小写字母 1 次或多次
.*
尽可能多匹配
"aabaa".replaceAll("a.*a", "X")
// 结果:X
?).*?
尽可能少匹配
"aabaa".replaceAll("a.*?a", "X")
// 结果:XbX
+).*+
不回溯(性能更好,但可能不匹配)
"aaaa".matches("a.*+a") // false
❌ 误以为量词作用于整个字符串
✅ 只作用于前面一个单元
❌ 忘记转义
"\\d+" // 正确
"\d+" // 错误
Java 正则量词 = 控制“前面内容”出现次数的规则,默认贪心,可用 ? 变懒惰,用 + 变独占。
如果你愿意,可以告诉我你具体在写什么正则(比如手机号、邮箱、日志解析),我可以帮你针对性解释。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。