0

0

正则表达式教程之匹配一组字符详解

高洛峰

高洛峰

发布时间:2017-01-09 16:04:21

|

1713人浏览过

|

来源于php中文网

原创

本文实例讲述了正则表达式教程之匹配一组字符的方法。分享给大家供大家参考,具体如下:

注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。

一、匹配多个字符中的某一个

在上一篇《正则表达式教程之匹配单个字符详解》中的一个匹配以na或sa开头的文本文件例子中,使用的正则表达式是.a.\.txt。如果还有一个文件是cal.txt,那么也将会被匹配到。如果只想要匹配na或sa开头的文件,该怎么办呢?

既然只想找出n或s,使用可以匹配任何字符的.显然是不行的。在正则表达式中,我们可以使用[和]来定义一个字符集合,在使用[和]来定义的字符集合里,这两个元字符之间的所有字符都是该集合的组成部分,字符集合的匹配结果是能够与该集合里的任何一个成员相匹配的的文本。

来看一个和上一篇相似一个例子:

文本:

sales.txt

na1.txt

na2.txt

sa1.txt

sanatxt.txt

cal.txt

正则表达式:[ns]a.\.txt

结果:

sales.txt

【na1.txt】

【na2.txt】

【sa1.txt】

sanatxt.txt

cal.txt

分析:这里使用的正则表达式是以[na]开头,这个集合将匹配字符n或s,不会匹配其他任何字符。[和]不匹配任何字符,它们只负责定义一个字符集合。接下来a匹配一个字符a,\.将匹配一个.字符本身,txt匹配txt字符本身,匹配结果与我们预期的一致。

但是,如果文件中如果有一个文件是usa1.txt,那么它也会被匹配出来。这是位置匹配的问题,在后面将会讨论到。

二、使用字符集合区间

上面的例子中,如果我们只想匹配以na或sa开头,后面跟一个数字的文件怎么办?正则表达式[ns]a.\.txt中,.将会匹配到任意一个字符,包括数字。这个问题可以使用字符集合来解决:

sales.txt

na1.txt

na2.txt

sa1.txt

san.txt

sanatxt.txt

cal.txt

正则表达式:[ns]a[0123456789]\.txt

结果:

sales.txt

【na1.txt】

【na2.txt】

【sa1.txt】

san.txt

sanatxt.txt

cal.txt

分析:从结果可以看到,我们只匹配出来以na或sa开头,后面跟一个数字的文件,而san.txt没有被匹配出来,因为使用了字符集合[0123456789]来限定第三个字符只能是数字。

ONLYOFFICE
ONLYOFFICE

用ONLYOFFICE管理你的网络私人办公室

下载

在正则表达式中,会很频繁的使用到一些字符区间,比如0-9,a-z等等,为了简化字符区间的定义,正则表达式提供了一个特殊的元字符-来定义字符区间。像上面这个例子,我们可以使用正则表达式来匹配:[ns]a[0-9]\.txt,结果与上面完全一样。

字符区间不仅限于数字,像下面这些都是合法的字符区间:

[A-F]:匹配从A到F的所有大写字母。

[A-Z]:匹配从A到Z的所有大写字母。

[A-z]:匹配从ASCII字符A到ASCII字符z的所有字母。但这个区间一般不会用到,只是举例说明。因为它们之间还包含着[和^等在ASCII中排列在Z和a之间的字符。

字符区间的首尾字符可以是ASCII字符列表中的任意字符。但在实际使用中,最常用的还是数字和字母字符区间。

注意:在定义字符区间的时候,不能让区间的尾字符小于首字符(如[9-0]),这是不允许的。-作为元字符只能出现在[和]之间,如果在[和]之外的任何地方,它只是一个普通的字符,只会与-本身匹配。

在同一个字符集合中可以给出多个字符区间,比如:[0-9a-zA-Z]将匹配任意一个大小写字母和数字。

来看一下匹配网页中颜色的例子:

文本:

测试

   

正则表达式:#[0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f]

结果:测试

分析:在网页中,颜色一般表示为一个以#开头的RGB值,R代表红色,G代表绿色,B代表蓝色,任何一种颜色都可以通过RGB的不同组合调和出来。RGB值用16进值表示,如#000000代表白色,#FFFFFF代表黑色,#FF0000代表红色。所以网页中匹配颜色的正则表达式是以#开头,后面跟6个相同的[0-9A-Fa-f]字符集合(这可以简写成#[0-9A-Fa-f]{6},会在后面的重复匹配中讨论到)。

三、取非匹配

字符集合通常用来指定一组必须匹配其中之一的字符,但在某些场合,我们需要反过来做,给出一组不需要得到的字符,换句话说,除了在那个字符集合中的字符,其他的任意字符都可以匹配。

比如,要匹配以na或sa开头,后面跟的不是数字的文件:

文本:

sales.txt

na1.txt

na2.txt

sa1.txt

sanatxt.txt

san.txt

正则表达式:[ns]a[^0-9]\.txt

结果:

sales.txt

na1.txt

na2.txt

sa1.txt

sanatxt.txt

【san.txt】

分析:这个例子使用的模式正好与前面的相反,前面[0-9]只匹配数字,而这里[^0-9]匹配的是非数字。

注意:^在[和]之间表示取非,如果出现在正则表达式的开头,表示位置匹配匹配了,这将在后面讨论到。同时,^的效果将作用于给定字符集合里的所有字符或字符区间,而不仅限于紧跟在^字符后面的那一个字符或字符区间。如[^0-9a-z]表示不匹配任何数字或小写字母。

四、小结

元字符[和]用于定义一个字符集合,其含义是必须与该集合里的字符之一匹配。定义一个字符集合的方法有两种:一是把所有的字符都列举出来;二是利用元字符-以字符区间的方式给出。字符集合可以使用元字符^来取非,这将把给定的字符集合强行排除在匹配操作外,除了该字符集合里的字符,其他字符都可以匹配。

在接下来的文章中,我们将会讨论正则表达式中的一些元字符的使用。

希望本文所述对大家正则表达式学习有所帮助。

更多正则表达式教程之匹配一组字符详解相关文章请关注PHP中文网!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【李炎恢】ThinkPHP8.x 后端框架课程
【李炎恢】ThinkPHP8.x 后端框架课程

共50课时 | 4.5万人学习

Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 0.9万人学习

php初学者入门课程
php初学者入门课程

共10课时 | 0.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号