全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

注:在所有例子中正则表达式匹配结果包含在源文本中的之间,有的例子会使用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]来限定第三个字符只能是数字。

在正则表达式中,会很频繁的使用到一些字符区间,比如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]将匹配任意一个大小写字母和数字。

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

文本:

<span style="background-color:#3636FF;height:30px; width:60px;">测试</span>

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

结果:<span style="background-color:【#3636FF】;height:30px; width:60px;">测试</span>

分析:在网页中,颜色一般表示为一个以#开头的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]表示不匹配任何数字或小写字母。

四、小结

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

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

PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

JavaScript正则表达式在线测试工具:
http://tools./regex/javascript

正则表达式在线生成工具:
http://tools./regex/create_reg

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


# 正则表达式  # 匹配  # 一组字符  # 正则表达式匹配用户密码  # Javascript校验密码复杂度的正则表达式  # 手机号码  # 密码正则验证  # php password密码验证正则表达式(8位长度限制)  # js正则实现的密码框简单制作  # 还可以替换成自己想用得符号  # 密码强度检测函数(正则)  # 正则表达式教程之位置匹配详解  # 正则表达式教程之重复匹配详解  # 正则表达式教程之匹配单个字符详解  # JS正则匹配中文的方法示例  # 正则匹配密码只能是数字和字母组合字符串功能【php与js实现】  # 将会  # 可以使用  # 这是  # 配以  # 多个  # 出现在  # 但在  # 会在  # 只想  # 在后面  # 这将  # 与该  # 都是  # 不匹配  # 是一个  # 也会  # 都在  # 不需要  # 一是 


相关文章: 南京网站制作费用,南京远驱官方网站?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  模具网站制作流程,如何找模具客户?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  如何通过VPS搭建网站快速盈利?  制作表格网站有哪些,线上表格怎么弄?  如何在VPS电脑上快速搭建网站?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  定制建站流程解析:需求评估与SEO优化功能开发指南  如何配置IIS站点权限与局域网访问?  制作门户网站的参考文献在哪,小说网站怎么建立?  Python如何创建带属性的XML节点  昆明高端网站制作公司,昆明公租房申请网上登录入口?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  建站之星如何取消后台验证码生成?  建站之星2.7模板:企业网站建设与h5定制设计专题  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  建站之星如何配置系统实现高效建站?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  制作证书网站有哪些,全国城建培训中心证书查询官网?  MySQL查询结果复制到新表的方法(更新、插入)  ,制作一个手机app网站要多少钱?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  建站主机选哪家性价比最高?  临沂网站制作企业,临沂第三中学官方网站?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  名字制作网站免费,所有小说网站的名字?  如何在宝塔面板中修改默认建站目录?  制作宣传网站的软件,小红书可以宣传网站吗?  如何快速搭建虚拟主机网站?新手必看指南  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  制作旅游网站html,怎样注册旅游网站?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  历史网站制作软件,华为如何找回被删除的网站?  如何在万网自助建站平台快速创建网站?  C#如何在一个XML文件中查找并替换文本内容  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  建站之星后台密码遗忘或太弱?如何重置与强化?  javascript基本数据类型及类型检测常用方法小结  如何在阿里云服务器自主搭建网站?  如何在服务器上配置二级域名建站?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  C#怎么创建控制台应用 C# Console App项目创建方法  个人网站制作流程图片大全,个人网站如何注销?  如何在Windows 2008云服务器安全搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。