千家信息网

Perl正则表达式中字符与字符集有哪些

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章将为大家详细讲解有关Perl正则表达式中字符与字符集有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。⑴元字符正则表达式语言由两种基本字符类型组成:原义文
千家信息网最后更新 2025年02月23日Perl正则表达式中字符与字符集有哪些

这篇文章将为大家详细讲解有关Perl正则表达式中字符与字符集有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

⑴元字符

正则表达式语言由两种基本字符类型组成:原义文本字符和元字符( metacharacter )。原义文本字符也即要匹配的实际文本字符或者空格,而元字符是一个或一组代替一个或多个字符的字符,可以用来进行模糊匹配。常用的元字符及其表达式的含义如下表所示:

元字符的元(meta)实际上是通配的意思(但与linux的通配符不是一个体系)。在Perl中,反斜杠\就是一个特殊的元字符,要想匹配元字符本身(而不是他在正则表达式里面的含义),可以在相应的元字符之前加反斜杠,例如'\.'、'\*'、'\\'就分别匹配文本中的'.'、'*'、'\'。此外元字符^匹配行首,在集合字符[]内部表示补集,元字符$则匹配行尾。

⑵模式分组与捕获

在 Perl 的正则表达式中,圆括号 () 也是一个特殊的元字符,用来对字符串进行分组,很多元字符只对单个字符进行操作,进行分组后可对多个字符进行操作,如下所示:
fred+    #可匹配freddddd…(fred)+    #可匹配fredfredfred…
圆括号内也即模式组内的字符串也可以被反向引用来进行操作,被引用的模式组也被称为捕获组( capture group ),引用方法为反斜杠加捕获组顺序编号,如下所示:
(.)\1        #匹配一个任意字符并重复一次,也即匹配两个连续的相同字符y(….) d\1      #匹配y开头后面四个任意字符,d开头也是相同这样字符的两个单词,例如yabba dabbay(.)(.)\2\1      #匹配y开头后面两个任意字符,然后接下来是这两个字符的倒序的单词,这是匹配类似yabba的这种回文结构y((.)(.)\3\2) d\1    #嵌套结构的反向引用,这里匹配y开头和d开头具有四个字符回文结构的单词组,例如yabba dabba
对于复杂嵌套结构的捕获组编号, Perl 有个很简单的规则,只需根据从左到右左圆括号的顺序即可。如果反向引用捕获组编号后面紧跟着数字,为了消歧义可能需要更多的圆括号,而从 Perl 5.10 开始,反向引用可以使用 \g{n} 的格式,如下所示:
(.)\g{1}11    #匹配类似于aa11这样的字符

在这种格式写法下,还可以使用相对位置进行编号:

(.)(.)\g{-1}11  #匹配类似于xaa11这样的字符

相对反向引用使用负号来指左边的捕获组,-1则为在左边最靠近引用位置的捕获组,这种写法避免了在另外加入括号之后所有编号都必须修改的窘况,更有利于程序维护。

很多时候我们仅仅是想填加括号进行分组,但是又不想修改所有反向引用的编号,可以只启用圆括号的模式分组功能而关闭捕获功能,在左圆括号内添加 ?: 修饰符,如下所示:
y(?:(.)(.)\2\1) d(?:(.)(.)\4\3)    #外层括号只起到模式分组作用,可以匹配类似yabba deffe结构的词组

⑶字符集

字符集(character class)是指一组可能出现的字符,通过写在方括号[]内的表达式进行表示,字符集可以匹配包含在集合内的单个字符。例如[abcxyz]可以匹配出现在字符串中的a、b、c、x、y、z中的任一个,相连的字符中间可以使用连字符-表示范围,例如上式可以写为[a-cx-z],如果在集合内包含连字符本身(而不是表示范围的含义)则可以使用反斜杠转义。对于ASCII字符可以使用反斜杠加八进制数字编码进行表示,例如[\000-\177]会匹配全部127个ASCII字符。在集合中开头添加脱字符^可以取补集,例如[^0-9]会匹配除数字以外的字符。对于Unicode字符集,除了可以像\x{2668}通过编码进行匹配外,还可以通过Unicode属性,例如很多字符属于空白符Space、数字Digit等,那么匹配的表达式则为\p{Space}和\p{Digit}。

字符集的出现是为了简写正则表达式,字符集也可以缩写例如\d可以代表[0-9],\w可以代表[a-zA-Z0-9_]。但在Perl从ASCII时代迈向Unicode时代之后,字符集的缩写更加宽泛,\d除了可以匹配普通数字,还可以匹配其他语言里的各种数字写法。从Perl 5.14开始,可以在正则表达式界定符后面添加修饰符a(关于界定符和修饰符详见下一小节),则正则表达式严格按照ASCII编码进行匹配,例如/\d/a则等同于/[0-9]/。字符集缩写将小写字母改为大写字母即变为补集,例如ASCII编码下\D可以代表[^0-9],此外很有意思的是[\d\D]将会匹配任何字符且包括换行符,这比'.'所包含的范围更广。

⑷元字符优先级

和操作符或者函数一样,正则表达式的元字符也存在优先级问题。元字符优先级规则如下所示:

①在此优先级表的最顶端是括号(),在模式分组和反向引用的时候使用,括号内部的任何部分比括号外的部分结合更紧密;

②第二级是数量词即星号(*), 加号(+),问号(?)以及由花括号表示的数量词,如{5,15}、{3, }、{5}等,它们通常和前一项元素紧密结合;

③第三级的是锚定和序列(sequence),锚定包括开头^、结尾$、词界符\b、非词界符\B,序列(一个元素紧接着一个元素)实际上是一种操作,虽然它没有使用元字符;

④ 优先级最低的是竖线 | ,表示或,由于其优先级最低,它通常将模式划分成几个部分。

关于"Perl正则表达式中字符与字符集有哪些"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

字符 元字符 表达式 字符集 正则 开头 括号 模式 分组 优先级 圆括号 数字 斜杠 结构 两个 文本 编码 代表 元素 写法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术课题工作内容 博彩数据库sql 网络安全标准规范执行情况 美国大学 数据库 广东工业软件开发价格多少 安全错误不能认证服务器三星 盖世网络技术怎么样 华为服务器售后服务管理 软件开发企业创办经历 全球网络安全战略研究 辽宁仪威软件开发有限公司 手工复制mysql数据库 网络安全 个人信息包 软件开发基本要学的课程 美孚公司网络安全事件 一折服务器 武汉网络安全员工资和奖金多少 贵州较快的dns服务器云空间 软件开发需求分析原则 方舟推荐简单非官方服务器 山西统一软件开发服务参考价格 数据库删除表中的一条记录 南宁网络安全研究 北京互联网科技有限公司注册流程 开展网络安全知识竞赛简讯 蓬莱微信公众号软件开发公司 数据库中的数据可以是整型 湘潭网络安全人才与创新基地 专门为服务器定制的安全管家 怎么解除手机无法连接服务器
0