正则表达式——字符组

字符组

待匹配文本:

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字符组,如下表示。

相关推荐
yivifu5 小时前
能够使用Python正则表达式函数的文本处理工具——Calibre电子书编辑器
正则表达式
全栈陈序员17 小时前
【Python】基础语法入门(二十九)—— 正则表达式实战:文本处理利器
开发语言·人工智能·python·正则表达式
BruceXu7 天前
\b 在中文里会静默失效:三个正则坑和一份能用的字符边界方案
正则表达式
阿昭L8 天前
正则表达式
正则表达式·编译原理
波力海苔夹心脆6758 天前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
FRing0310 天前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
小白快快跑哦11 天前
python-字符串全解(六):正则表达式-元字符与转义
python·正则表达式·字符串·元字符·转义
小白快快跑哦13 天前
python-字符串全解(六):正则表达式-逻辑运算或
python·正则表达式·字符串·逻辑运算
MoRanzhi120313 天前
106.正则问题(分治)
python·算法·正则表达式·蓝桥杯·递归·分治算法·字符串处理
临床数据科学和人工智能兴趣组15 天前
在R语言的生态系统中,字符串处理一直是一个重要且复杂的任务
开发语言·正则表达式·r语言·r语言-4.2.1