字符组1、字符组取反2、并集与差集3、POSIX字符组待匹配文本! # $%(),-./0123456789:;?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ a b c d e f g h i j k l m n o p q r s t u v w x y z{|}1、字符组取反对字符组取反的语法之前你已经见过好几次了这里我就简单介绍一下。对字符组取反会匹配与字符组内容不匹配的字符。比如如果你不想匹配元音字符可以这样写​[^aeiou]该字符组起始位置的脱字符^的意义就是​“不我不想匹配这些字符。​”​脱字符必须出现在起始位置。​2、并集与差集字符组可以像集合那样操作。事实上字符组的另一个名称就是字符集character set​。不是所有的实现程序都支持这项功能但Java支持该功能。我将展示一个叫做Reggy的Mac桌面应用程序参见5.5节​。在其Preference偏好设置面板中​我将Regular Expression Syntax正则表达式语法改为“Java”​而在Font中在Format里​为了阅读方便我将字体大小设为24。如果你想要两个字符组的并集可以这样做[0-3[6-9]]正则表达式处理器会匹配0到3之间的数字或者6到9之间的数字。下图展示了这在Reggy中的结果。匹配差集实质上就是减操作​[a-z[^m-r]]这匹配a到z之间的字符但其中m到r之间的字符除外如图所示​。3、POSIX字符组POSIXPortable Operating System Interface可移植操作系统接口是IEEE维护的一系列标准。其中包含了一个正则表达式标准ISO/IEC/IEEE 9945:2009​该标准提供了一套命名的字符组其形式为[[:xxxx:]]其中xxxx是名字比如digit或者word。其中xxxx是名字比如digit或者word。要匹配字母及数字可以用[[:alnum:]]下图展示的是在Rubular中使用字母及数字字符组的情况。还有一种方法就是只用简写式\w。哪种方法写起来简便是POSIX字符组还是简写式当然是字符最少的方法胜出。我承认自己并不常使用POSIX字符组但是还是有必要了解一下。对于大写或小写的字母使用[[:alpha:]]如果你想匹配ASCII范围内的字符则用[[:ascii:]]当然还有对POSIX字符组取反的形式[[:^xxxx:]]如果想匹配非字母字符可以使用[[:^alpha:]]要匹配空格或制表符使用[[:space:]]若匹配所有空白字符则用[[:blank:]]还有很多POSIX字符组如下表示。