Java 正则“不生效”是新手和老手都常踩的坑,通常不是正则本身写错,而是 Java 字符串 + 正则引擎机制 导致的。下面按最常见原因给你梳理一下。
\ 被字符串转义了(90% 的问题)错误示例:
String regex = "\d+";
❌ 编译直接报错或匹配不到
正确写法:
String regex = "\\d+";
原因:
\ 是转义符\d 在 Java 中必须写成 \\d✅ 常见对照:
| 正则 | Java 写法 |
|---|---|
\d |
\\d |
\w |
\\w |
\. |
\\. |
\\ |
\\\\ |
== 或 contains 而不是正则方法❌ 错误:
if (str == "\\d+") { }
✅ 正确方式:
str.matches("\\d+");
// 或
Pattern.compile("\\d+").matcher(str).find();
String.matches() 是“全匹配”"abc123".matches("\\d+"); // false
✅ 它等价于:
"^\\d+$"
如果你只是想包含数字:
Pattern.compile("\\d+").matcher(str).find();
比如:
.?+()错误:
"a.b".matches("a.b"); // 会匹配 aXb
正确:
"a.b".matches("a\\.b");
. 不匹配换行)"hello\nworld".matches(".*world.*"); // false
解决:
Pattern.DOTALL
或
"(?s).*world.*"
"a<b>123</b>".replaceAll("<.*>", "");
结果是:
a
✅ 改成非贪婪:
"<.*?>"
Pattern.CASE_INSENSITIVE"ABC".matches("abc"); // false
✅ 解决:
Pattern.compile("abc", Pattern.CASE_INSENSITIVE);
Pattern p = Pattern.compile("你的正则");
Matcher m = p.matcher("测试字符串");
while (m.find()) {
System.out.println(m.group());
}
如果你愿意,把下面信息发我:
我可以直接帮你改到能跑 ✅
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。