• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-01-17 07:43 Aet 隐藏边栏 |   抢沙发  2 
文章评分 1 次,平均分 5.0

分组

之前有提到过,量词能限定之前元素的出现,这个元素可能是一个字符,也可能是一个字符组,还可能是一个表达式---如果把一个表达式用括号包围起来,这个元素就是括号里的表达式
括号内的表达式通常被成为“子表达式”。

括号的这种功能,叫做分组。
如果用量词限定出现次数的元素不是字符或字符组,而是连续的几个字符甚至是表达式,就应该用括号将他们“编为一组”。

多选结构

多选结构的形式是(...|...)这样的。
在括号内以竖线分隔开多个子表达式,这些子表达式也叫,多选分支。
多选分支的数目没有限定。
在匹配时,整个多选结构被视为单个元素,只要其中某个表达式能够匹配,整个多选结构的匹配就能成功。

引用分组

使用括号之后,正则表达式会保存每个分支真正匹配的文本,等到匹配完成后,通过group(num)之类的方法”引用“分组在匹配时捕获的内容。
num从1开始计数。

这种功能叫捕获分组,对应的括号叫捕获型括号。

反向引用

在表达式内部引用之前的捕获分组匹配的文本(也就是左侧)。
形式是\num,num表示分组的编号。

需要注意的是:
反向引用重复的是对应捕获分组匹配的文本,而不是之前的表达式;
也就是说,反向引用是一种”引用“,对应的是由之前表达式决定的具体的文本,它本身并不规定文本的特征。

命名分组

非捕获型分组

到目前为止,接触到的括号有三种用途:

  • 分组
  • 多选结构
  • 引用分组

这三种用途是相互重叠的:只要出现了括号,正则表达式在匹配时就会把括号内的子表达式存储起来,提供引用。如果用不到这些内容,那么无疑,这些东西会影响到正则表达式的性能。
为了解决这个问题:
正则表达式提供了非捕获型分组:
非捕获型分组,类似于普通的捕获分组,只是在开括号后紧跟一个问号和冒号,形如(?:...),这样的括号叫非捕获型括号。
它只能限定量词的作用范围,不捕获任何文本。

转义的补充

需要注意:
与括号有关的3个元字符【()|】,都必须转义

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-21
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享