正则基础之分组

2023-10-27  本文已影响0人  Tinyspot

1. 分组

1.1 分组匹配

示例:ab+(ab)+
ab+ 受+限定的就只有b
(ab)+,此时(ab)成为一个整体,由量词+来限定

1.2 分组匹配2

正则 \d{15}\d{3}?
d{3} 表示三次,加问号非贪婪还是 3 次

正则 \d{15}(\d{3})?
在 \d{3} 整体后加问号,表示后面三位可有可无

2. 多选结构

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

2.1 没有括号的多选结构

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

2.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])$

2.3 匹配IP地址

匹配一段数值在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. 捕获分组

3.1 分组

(\d{3})-(\d{5}) 分组提取数据,\d{3}-\d{5} 只是匹配
(.mp4|.avi|.wmv) 匹配多个,[Uu] 匹配单个字符

3.2 分组回溯引用

示例一:


示例二:


正则 ((a)b)(c)\1

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

3.3 匹配重复数据

示例一:正则 (\w{2,})\1

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


3.4 分组引用替换

# 数据:3334444-55555
regex: (\d{3})(\d{4})(-)
 # $1 表示第一个表达式
replace: ($1) $2
# 结果:(333) 444455555

4. 非捕获分组

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读