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

news/2024/7/5 9:00:06

正则表达式的作用

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


http://lihuaxi.xjx100.cn/news/1275457.html

相关文章

【Redis】多级缓存之OpenResty:nginx查询Tomcat与Redis以及nginx本地缓存

目录 一、认识OpenResty 二、请求参数处理 三、查询Tomcat 四、Redis缓存预热 五、查询Redis缓存 六、nginx本地缓存 一、认识OpenResty OpenResty是一个基于nginx的高性能Web平台&#xff0c;他用于方便的搭建能够处理高并发、扩展性极高的动态Web应用、Web服务和动态网…

elasticsearch生命周期的阶段

Hot: The index is actively being updated and queried. 可以设置滚动阈值 hot阶段是必须的,其他的阶段是可选的 hot phase有个坑: rollover 这里指的是如果你想让索引在hot阶段待5min,你可以在hot设置rollover时间触发条件为5min,然后warm阶段设置data into为0,正常情况下没…

我心中的TOP1编程语言—JavaScript

作为一名研发工程师&#xff08;程序员&#xff09;&#xff0c;平时工作中肯定会接触或了解很多编程语言。每个人都会有自己工作中常用的语言&#xff0c;也会有偏爱的一些编程语言。而我心中的最爱&#xff0c;毫无疑问&#xff0c;就是 JavaScript。 个人认为&#xff0c;一…

TIA博途_字符转换为字符串以及截取字符串有效字符的具体方法示例

TIA博途_字符转换为字符串以及截取字符串有效字符的具体方法示例 情景再现: 在做某些通信相关的项目时,可能会遇到通信接收到的字符串是以字节的形式传送过来的字符,此时就需要我们对接收到的这些字符进行处理,从而获取我们实际需要的字符或字符串。 如下图所示,打开博途…

微服务系列文章之 Springboot集成Jersey

​ Springboot支持Jersey1.x和Jersey2.x&#xff0c;我们这里只介绍Springboot对Jersey2.x的支持。springboot对jersey的集成非常简单。 ​ 项目结构&#xff1a; 1、引入Springboot对Jersey的starter包 <dependencies><dependency><groupId>org.springfram…

CODESYS 数组类型变量(ARRAY)使用介绍

博途PLC数组类型变量使用介绍请参看下面文章博客: 博途1200/1500PLC上升沿下降沿指令编程应用技巧(bool数组)_博途上升沿指令_RXXW_Dor的博客-CSDN博客博途PLC的下降沿和上升沿指令,在控制系统编程时经常会使用。和SMARTS7-200有所不同,遵循IEC-6113标准提供的上升沿下降沿…

java适配达梦数据库

目录 一、数据库安装 二、数据库可视化工具 三、数据迁移 四、工程适配 新增maven依赖 配置文件修改 基于flyway的数据库版本管理 五、注意事项 一、数据库安装 官方文档&#xff1a;安装前准备 | 达梦技术文档 这里有一个点需要注意&#xff0c;如果你之前的数据库或…

中国人民大学与加拿大女王大学金融硕士——在职读研让能力加速提升

不管你是初入职场的小白&#xff0c;还是久经沙场的元老&#xff0c;想要在职场有所作为&#xff0c;就不要忽略自我能力提升。决定一个人当前职场价值不是他拥有了什么&#xff0c;而是他将来能够创造什么。如果你只盯着工作&#xff0c;那么你的眼界和薪资将会被工作所决定&a…