正则表达式——字符组

字符组

待匹配文本:

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

相关推荐
谢亮_vipxieliang12 小时前
手机号验证技术方案:号段规则与正则表达式
java·服务器·spring boot·正则表达式·hibernate
zx_7414848113 小时前
【Python 入门】Python 正则表达式零基础讲解:基础语法 + 元字符 + 常用案例
python·正则表达式
deli00700713 小时前
正则表达式可视化测试工具:输入即匹配,高亮一目了然
git·测试工具·正则表达式
ydd1001002 天前
正则表达式匹配
正则表达式·代理模式
落魄大学生之流水线上谋生计3 天前
正则表达式完全指南:从入门到精通
正则表达式
tianyu2345 天前
Java 正则表达式终极指南:从 Pattern 到 Matcher,从双重转义到性能优化,一篇全搞定
java·开发语言·正则表达式·group·find·pattern·matcher
OPEN-F6 天前
Python进阶教程:正则表达式进阶与文本处理
开发语言·python·正则表达式
小小龙学IT9 天前
C++ 正则表达式完全指南:从 std::regex 实战到 RE2 引擎原理(NFA/DFA/回溯陷阱)
c++·正则表达式
傻啦嘿哟9 天前
猫眼电影TOP100爬虫:Requests+正则表达式实战
爬虫·正则表达式
circuitsosk9 天前
AI输出的“质检员”:构建智能体质量评估、异常检测与人工兜底的三层防线
人工智能·python·microsoft·正则表达式·langchain