正则表达式——字符组

字符组

待匹配文本:

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

相关推荐
databook4 天前
面向数据工程师的正则表达式:从日志清洗到字段提取
python·正则表达式·数据分析
小白快快跑哦5 天前
python-字符串全解(六):正则表达式-位置断言
python·正则表达式·位置断言
哭泣方源炼蛊8 天前
正则表达式c++内容汇集
数据库·c++·mysql·正则表达式
划破黑暗的第一缕曙光8 天前
正则表达式使用规则和用例
正则表达式·语法·图表·语法规则·练习用例
小白快快跑哦9 天前
python-字符串全解(六):正则表达式-量词
python·正则表达式·字符串
福兮说9 天前
JS 正则的六个坑:带 g 的 test() 一真一假、空匹配死循环、replace 里的 $
开发语言·前端·javascript·正则表达式
Rebecca_aLi9 天前
码匠教育:零基础学 Python,标识符到循环全套基础语法解析
开发语言·python·正则表达式
IvanCodes9 天前
Python 正则表达式(十四):文本匹配、查找与替换
开发语言·python·正则表达式
FED_AF10 天前
Linux运维“邪修”功法之正则表达式
linux·运维·正则表达式
长按助力退休12 天前
正则表达式从入门到不懵逼
正则表达式