正则表达式——字符组

字符组

待匹配文本:

js 复制代码
! " # $ % & ' ( ) * + , - . /
0        1        2        3        4        5        6        7        8        9
: ; < = > ? @
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
[ \ ] ^ _ `
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、字符组取反

对字符组取反的语法之前你已经见过好几次了,这里我就简单介绍一下。对字符组取反会匹配与字符组内容不匹配的字符。比如,如果你不想匹配元音字符,可以这样写​:

js 复制代码
[^aeiou]

该字符组起始位置的脱字符(^)的意义就是:​"不,我不想匹配这些字符。​"​(脱字符必须出现在起始位置。​)

2、并集与差集

字符组可以像集合那样操作。事实上,字符组的另一个名称就是字符集(character set)​。不是所有的实现程序都支持这项功能,但Java支持该功能。

我将展示一个叫做Reggy的Mac桌面应用程序(参见5.5节)​。在其Preference(偏好设置)面板中​,我将Regular Expression Syntax(正则表达式语法)改为"Java"​,而在Font中(在Format里)​,为了阅读方便,我将字体大小设为24。

如果你想要两个字符组的并集,可以这样做:

js 复制代码
[0-3[6-9]]

正则表达式处理器会匹配0到3之间的数字或者6到9之间的数字。下图展示了这在Reggy中的结果。

匹配差集(实质上就是减操作)​:

js 复制代码
[a-z&&[^m-r]]

这匹配a到z之间的字符,但其中m到r之间的字符除外(如图所示)​。

3、POSIX字符组

POSIX(Portable Operating System Interface,可移植操作系统接口)是IEEE维护的一系列标准。其中包含了一个正则表达式标准(ISO/IEC/IEEE 9945:2009)​,该标准提供了一套命名的字符组,其形式为:

js 复制代码
[[:xxxx:]]

其中xxxx是名字,比如digit或者word。

其中xxxx是名字,比如digit或者word。

要匹配字母及数字,可以用:

js 复制代码
[[:alnum:]]

下图展示的是在Rubular中使用字母及数字字符组的情况。

还有一种方法就是只用简写式\w。哪种方法写起来简便,是POSIX字符组还是简写式?当然是字符最少的方法胜出。我承认自己并不常使用POSIX字符组,但是还是有必要了解一下。

对于大写或小写的字母,使用:

js 复制代码
[[:alpha:]]

如果你想匹配ASCII范围内的字符,则用:

js 复制代码
[[:ascii:]]

当然,还有对POSIX字符组取反的形式:

js 复制代码
[[:^xxxx:]]

如果想匹配非字母字符,可以使用:

js 复制代码
[[:^alpha:]]

要匹配空格或制表符,使用:

js 复制代码
[[:space:]]

若匹配所有空白字符,则用:

js 复制代码
[[:blank:]]

还有很多POSIX字符组,如下表示。

相关推荐
天若有情6734 小时前
自制浏览器端文本批量处理小工具,支持查找替换、内容删除、正则表达式,开箱即用
正则表达式
吴声子夜歌9 小时前
正则表达式——简单的模式匹配
正则表达式
吴声子夜歌14 小时前
正则表达式——前后查找
正则表达式
吴声子夜歌15 小时前
正则表达式参考
正则表达式
吴声子夜歌1 天前
正则表达式——常见应用软件和编程语言中的正则表达式
正则表达式
吴声子夜歌1 天前
正则表达式——使用子表达式
正则表达式
吴声子夜歌2 天前
正则表达式——重复匹配
正则表达式
吴声子夜歌2 天前
正则表达式——匹配单个字符
正则表达式
吴声子夜歌3 天前
正则表达式——位置匹配
正则表达式