正则表达式-捕获组,命名捕获组,非捕获组

正则表达式的作用

  • 测试目标字符串是否符合规则  返回true/false
  • 按照规则从目标字符串提取内容 返回匹配的数组

在线测试工具

regex101: build, test, and debug regexRegular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java, C#/.NET, Rust.https://regex101.com/

Rubular: a Ruby regular expression editorhttps://rubular.com/

正则表达式的组成成分

正则表达式的组成成分,记住口诀:定元限排选转分

  • 定位符 定位符用来指定匹配的边界。定位符有^$,分别指定匹配的内容以什么开头,和以什么结尾。
  • 元字符 元字符用来指定相关字符元素是什么类型的字符。
  • 限定符 限定符用来指定相关字符出现的次数。
  • 排除字符 排除字符用来指定相关字符不为某种字符。
  • 选择字符 选择字符用来表示多选项匹配。
  • 转义字符 转义字符用来表示与元字符冲突的原始字符。
  • 分组 分组用来在正则表达式中划出一个子表达式作为一个小组,这个小组看成一个整体,方便对其应用限定符、排除字符和选择字符。

定位符

定位符用来指定匹配的边界。

定位符有^$,分别指定匹配的内容以什么开头,和以什么结尾。

元字符

元字符用来指定相关字符元素是什么类型的字符。代表一类字符,如数字,空白字符,非数字字符。

符号代表意思使用场景
.匹配除换行符之外的所有字符. 单个换行符之外所有字符
\d匹配数字0-9\d 匹配单个数字,1、2、3
\D匹配非数字\D 匹配单个非数字,a、-、'
\w匹配字母、数字、下划线\w 匹配单个字母、数字、下划线,a、1、_
\W匹配非字母、数字、下划线\W 匹配单个非字母、数字、下划线,{、-、[
\s匹配空白字符\s 匹配单个空格、回车(\n)、制表符(\t)
\S匹配非空白字符\S 匹配单个非空格、换行(\n)、制表符(\t)
\b匹配单词的开始或结束,单词的分界符通常是空格,标点符号或换行。在“I like mr or am"字符串中,\bm与mr中的m相匹配,但与am中的m不匹配

捕获组

  • 普通捕获组(Expression)
  • 命名捕获组(?<命名>Expression)
  • 非捕获组(?:Expression)

普通捕获组

从正则表达式左侧开始,每出现一个左括号"("记做一个分组,分组编号从 1 开始。0 代表整个表达式。

对于时间字符串:2017-04-25,表达式如下

(\\d{4})-((\\d{2})-(\\d{2}))

有 4 个左括号,所以有 4 个分组:

编号捕获组匹配
0(\d{4})-((\d{2})-(\d{2}))2017-04-25
1(\d{4})2017
2((\d{2})-(\d{2}))04-25
3(\d{2})04
4(\d{2})25

命名捕获组

每个以左括号开始的捕获组,都紧跟着 ?,而后才是正则表达式。

对于时间字符串:2017-04-25,表达式如下:

(?<year>\d{4})-(?<md>(?<month>\d{2})-(?<date>\d{2})) 

有 4 个命名的捕获组,分别是:

编号名称捕获组匹配
00(?\d{4})-(?(?\d{2})-(?\d{2}))2017-04-25
1year(?\d{4})-2017
2md(?(?\d{2})-(?\d{2}))04-25
3month(?\d{2})04
4date(?\d{2})25

命名的捕获组同样也可以使用编号获取相应值。

非捕获分组

模式描述
(?: re)对正则表达式进行分组,但不记住匹配文本。

比如说要查找,单词前缀字母个数为1个或2个的母体单词,要匹配的文本如下:

d-order
re-call
anti-war
macro-world
micro-world

 非捕获表达式:

/(?:^[a-zA-Z]{1}|^[a-zA-Z]{2})-(?<word>[a-zA-Z]+)/gm

 结果

捕获表达式

(?^[a-zA-Z]{1}|^[a-zA-Z]{2})-(?<word>[a-zA-Z]+)

结果 ,这个是包含group 1的,与非捕获表达式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值