方括号表达式定义了一个字符序列,例如:[0-9] 等价于 [0123456789] 将匹配数字。它有助于匹配特定字符或特定的字符序列。并且,方括号表达式可以像元字符一样,代表一大批字符。
例如,\d 匹配的字符与 [0-9] 匹配的字符一样。
但是,方括号表达式更具有针对性,因此用途比元字符更广。
实例:使用方括号表达式匹配文本中所有的小写和大写元音字母,如下:
上图中,模式 [aeiouAEIOU] 将匹配小写和大写元音字母,匹配的字母将高亮;
上面介绍了使用方括号表达式匹配小写和大写元音字母,总共写了10个字符。方括号表达式还支持匹配某个范围内的字符,例如:
[A-Z]
匹配从 A 到 Z 的大写字母。范围也可以缩小,例如从 A 到 E:
[A-E]
当然,不仅仅匹配字符,还可以匹配一个范围的数字:
[0-9]
或者让范围更小,例如从 1 到 5:
[1-5]
现在发挥一下想象力,如果你想匹配 10~19 的偶数,可以将两个字符组合起来写,如下:
上图中,模式 \b[1][02468]\b 将匹配 10~19 之间的偶数,\b 匹配单词边界。
方括号表达式取反还会匹配与方括号中声明的字符不匹配的字符。它需要结合 ^ 符号,语法如下:
[^待匹配的字符]
上面表达式中,^ 符号位于开始方括号符后面,整个模式的含义为:“不,我不想匹配这些字符”。
实例:匹配文档中所有非 a-zA-Z0-9 字符,如下:
上图中,模式 [^a-zA-Z0-9] 将匹配非 a 到 z,A 到 Z,以及 0 到 9 的字符。
方括号表达式可以像集合那样操作。事实上,方括号表达式另一个名称就是字符集。注意:不是所有的正则表式引擎实现程序都支持这些功能,但是 Java 支持该功能。
注意:下面的功能可以使用 Rubular 工具进行验证,官网地址:https://rubular.com/
如果你想要匹配两个方括号表达式的并集,可以这样做:
[0-3[6-9]]
运行上面模式,如下图:
正则表达式处理器会匹配0到3之间的数字或者匹配6到9之间的数字。
如果匹配差集,实质上就是减操作:
[a-z&&[^m-r]]
运行上面模式,如下图:
上面模式将匹配 a 到 z 之间的字符,但其中 m 到 r 之间的字符除外。