前言
在Ja va正则表达式里,中括号 [] 是一个相当常用且强大的工具——它用来定义一个字符集(character class),说白了就是匹配括号内的任意一个字符。那么,[] 具体怎么用?来看看几个最基础的用法,顺便熟悉一下它的小脾气。

匹配特定字符:
[abc]就能匹配到 'a'、'b' 或 'c' 中的任意一个,简单直接。范围表示:用连字符
-表示范围,比如[a-z]匹配所有小写字母,[A-Z]匹配大写字母,[0-9]匹配数字。这招特别省事。组合使用:把多个范围拼在一起,比如
[a-zA-Z]匹配任何字母(大小写都行),[a-zA-Z0-9]则匹配字母或数字,覆盖常见需求。排除特定字符:在左括号后面加个
^,就变成了“除了这些”。例如[^abc]匹配除 'a'、'b'、'c' 之外的任何字符,[^0-9]匹配任何非数字。特殊字符的“退化”:在字符集内部,很多原本在正则中有特殊意义的字符(比如
.、*、+、?)都变成了普通字符,直接匹配自己。但有两个例外:^和-在特定位置有特殊含义(如上所述),而\仍然肩负转义使命。转义字符:如果字符集中想包含
]、-、^或\本身,需要用反斜杠转义。比如[]]匹配一个右方括号(前面的]是转义后的,后面的]作为字符集结束符,写法有点绕,但熟练了就好)。连续范围:一个字符集里可以定义多个范围,比如
[a-zA-Z0-9_]匹配任何字母、数字或下划线,非常实用。
示例代码
下面给个实战场景:检查一个字符串是否只包含小写字母或数字。用 Ja va 代码来演示,一看就懂:
import ja va.util.regex.Pattern;
import ja va.util.regex.Matcher;
public class RegexExample {
public static void main(String[] args) {
String pattern = "^[a-z0-9]+$";
Pattern r = Pattern.compile(pattern);
// 测试字符串
String testString1 = "hello123";
String testString2 = "Hello123";
// 创建 matcher 对象
Matcher m1 = r.matcher(testString1);
Matcher m2 = r.matcher(testString2);
if (m1.find()) {
System.out.println("testString1: " + testString1 + " 匹配");
} else {
System.out.println("testString1: " + testString1 + " 不匹配");
}
if (m2.find()) {
System.out.println("testString2: " + testString2 + " 匹配");
} else {
System.out.println("testString2: " + testString2 + " 不匹配");
}
}
}
这里用的正则 ^[a-z0-9]+$ 表示“从头到尾整个字符串只能由小写字母或数字组成”。如果字符串符合条件,输出“匹配”,否则“不匹配”。注意 find() 方法其实只查找是否存在匹配的子串,想确保整个字符串完全匹配,应该用 matches() 方法,这个细节很多人容易搞混。