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

正则表达式的作用

  • 测试目标字符串是否符合规则  返回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,表达式如下:

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

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

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

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

非捕获分组

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

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

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

 非捕获表达式:

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

 结果

正则表达式-捕获组,命名捕获组,非捕获组_第1张图片

捕获表达式

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

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

正则表达式-捕获组,命名捕获组,非捕获组_第2张图片

你可能感兴趣的:(正则表达式)