在 Java 里**正则表达式匹配“特殊字符/符号”**通常分几种情况,我按常见需求给你总结一下,基本都能覆盖 90% 的使用场景。
在正则中,下面这些字符属于元字符(有特殊含义):
. * + ? ^ $ { } [ ] ( ) \ | /
如果你想匹配这些字符本身,就必须 转义。
String regex = "\\."; // 匹配 . 本身
String regex2 = "\\*"; // 匹配 *
因为:
\ 在 Java 字符串里是转义\ 在正则里也是转义.String text = "a.b";
boolean match = text.matches("a\\.b");
System.out.println(match); // true
[ ](字符类)String regex = "[.*+?]";
表示:匹配 . 或 * 或 + 或 ?
"a.b".matches("a[.*+?]b"); // true
String regex = "[^a-zA-Z0-9]";
含义:不是字母和数字 = 特殊字符
String regex = "[^a-zA-Z0-9\u4e00-\u9fa5_]";
String regex = "\\p{Punct}";
\p{Punct} 表示:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
示例:
"a,b".matches("a\\p{Punct}b"); // true
boolean hasSpecial = text.matches(".*[^a-zA-Z0-9].*");
如果你只是想原样匹配一段包含特殊字符的字符串:
String keyword = "a.b*";
String regex = Pattern.quote(keyword);
等价于把整个字符串当普通文本处理。
❌ 错误:
".*".matches(".*"); // 永远 true
✅ 正确:
".*".matches("\\.\\*"); // true
| 需求 | 正则 |
|---|---|
匹配 . |
\\. |
匹配 * |
\\* |
| 匹配任意特殊字符 | [^a-zA-Z0-9] |
| 匹配标点符号 | \\p{Punct} |
| 包含特殊字符 | .*[^a-zA-Z0-9].* |
| 原样匹配字符串 | Pattern.quote(str) |
如果你能说一下具体要匹配哪种特殊字符(比如:密码校验、文件名、SQL、URL 等),我可以给你一个更精准的正则。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。