美文网首页
正则基础之分组与引用

正则基础之分组与引用

作者: Tinyspot | 来源:发表于2023-01-09 22:06 被阅读0次

1. 分组(grouping)

  • 括号(…)

1.2 匹配身份证

从1999年10月1日起,全国实行公民身份证号码制度,居民身份证编号由原15位升至18位

正则表达式 [1-9]\d{13,16}[0-9x]
首位是数字(0除外)
中间都是数字
末位是数字或x (15位末位没有x)

描述 正则
15位身份证号 [1-9]\d{14}
18位身份证号 [1-9]\d{14}\d{2}[0-9x]
正则表达式 [1-9]\d{14}(\d{2}[0-9x])?
正则 - 多选结构 ^([1-9]\d{14}|[1-9]\d{14}\d{2}[0-9x])$

1.2 用括号改变量词的作用元素

  • 用一个括号将可选出现的部分分组,再用量词?限定
  • ab+(ab)+
    • ab+ 受+限定的就只有b
    • 字符串ab重复出现一次以上,就应该写作(ab)+,此时(ab)成为一个整体,由量词+来限定

2. 多选结构

多选结构的形式是(…|…),在括号内以竖线|分隔开多个子表达式,这些子表达式也叫多选分支(option)

没有括号的多选结构
^ab|cd$ 表示“字符串开头的ab或者字符串结尾的cd”
因为竖线|的优先级很低,所以 ^ab|cd$ 其实是(^ab|cd),而不是^(ab|cd)

2.1 匹配数字

示例一:
\d{15}|\d{18} 匹配结果不准确,因为18 位数字也会匹配上前 15 位

示例二:
改为 \d{18}|\d{15}^(\d{15}|\d{18)$

image.png

2.2 非贪婪模式(量词 + ?)

示例一:
\d{15}\d{3}? 由于 \d{3} 表示三次,加问号非贪婪还是 3 次

示例二:
\d{15}(\d{3})? 在 \d{3} 整体后加问号,表示后面三位有或无

image.png

2.3 匹配IP地址

  • IP 地址 (0~255).(0~255).(0~255).(0~255)

匹配一段数值在0~255之间的文本,正则 ([0-9]|[0-9]{2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])

情况分析 正则
如果是 1 位数,则对数字无限制 [0-9]
如果是 2 位数,则对数字无限制 [0-9]{2}
如果是 3 位数
  若第 1 位数字是 1,则第 2、3 位数字无限制 1[0-9][0-9]
 若第 1 位数字是 2
  第 2 位数字是 0~4,则第 3 位数字无限制 2[0-4][0-9]
  第 2 位数字是 5,则第 3 位数字只能是 0~5 25[0-5]

3. 捕获分组(capturing group)

  • () 分组捕获
  • (?:express) 非分组捕获,括号只用于归组,把某个部分当成“单个元素”,不分配编号,后面不会再进行这部分的引用
  • ?:express 匹配但不获取结果
  • (\d{3})-(\d{5}) 分组提取数据,\d{3}-\d{5} 只是匹配
  • (.mp4|.avi|.wmv) 匹配多个,[Uu] 匹配单个字符

3.1 分组编号

  • 分组编号只取决于开括号出现的顺序
  • group(num), num表示对应括号的编号,括号分组的编号规则是从左向右计数,从1开始
  • num的编号从1开始,
  • group()方法,不给出参数num,默认就等于调用group(0)

不保存子组
在括号里面使用 ?: (?:...)

3.2 分组回溯引用

  • 引用分组捕获的文本,不仅仅用于数据提取,也可以用于替换
  • 分组引用的编号用 \number 表示

示例1:
\1 表示匹配第一个分组

image.png

示例2:
正则 ((a)b)(c)\3,按左括号出现的顺序编号 \3 匹配 c

image.png

示例3:连续重复单词的匹配

image.png image.png

3.3 分组引用替换

  • 分组 一个括号是一组,可以把指定的组暂时先缓存起来 $1
# 数据:3334444-55555
regex: (\d{3})(\d{4})(-)
replace: ($1) $2  # $1 表示第一个表达式
# 结果:(333) 444455555
image.png

3.2 非捕获分组(non-capturing group)

  • (\w{2,})\1 匹配重复数据
  • aba#ababcc - (?:(?:a)b)(c)\1

数据:aba#ababcab
示例1:((a)b)(c)\1

image.png

示例2:((?:a)b)(c)\1

image.png

示例3:(?:(a)b)(c)\1

image.png

示例4:(?:(?:a)b)(c)\1
数据 aba#ababcc

image.png

相关文章

  • 正则表达式基础到高阶(语法)

    正则表达式基础到高阶(语法) 元字符 反义 重复模式 贪婪与懒惰 分组 后向引用 要匹配 taobao taoba...

  • 正则:分组

    正则分组作用: 1、改变优先级:2、分组引用 3、分组捕获:正则在捕获的时候,不仅把大正则匹配的内容捕获到,而且还...

  • 3.正则中()分组的作用

    上一篇:正则中需要注意的[]细节 正则中()分组的作用 改变默认的优先级 分组 捕获 分组的引用 改变优先级let...

  • eric6的正则技巧

    正则技巧之分组正则技巧之分组

  • 《JavaScript权威指南》读书笔记6 正则表达式

    正则表达式字符类: 正则表达式重复字符语法: 正则表达式的选择、分组和引用字符: 正则表达式中的锚字符: 正则表达...

  • 正则表达式中常用的方法

    以下讨论建立在正则中没有分组和子项的情况,在正则中有分组和子项时会有些许不同,具体请移步正则表达式中的分组与子项 ...

  • 后向引用

    后向引用:在后面的表达式中,引用前面某个分组所匹配到的内容 在解释之前需要先了解一下分组编号,在正则表达式中,每个...

  • 正则表达式学习(下)

    学习资料: 《学习正则表达式》 4. 选择、分组、向后引用 分组通过对文本加一对()圆括号来帮助执行某种操作: 在...

  • JavaScript 正则表达式(3)

    在JavaScript正则表达式(2)中,我们一起学习了正则表达式的入门进阶功能,比如反向引用,分组匹配,环视,一...

  • 正则表达式的分组与引用

    正则表达式中的小括号"()"。是代表分组的意思。如果在其后面出现 \1 则是代表与第一个小括号中要匹配的内容相同。...

网友评论

      本文标题:正则基础之分组与引用

      本文链接:https://www.haomeiwen.com/subject/raymcdtx.html