正则表达式的学习总结
文章目录
- 0. 引言
- 1. 正则表达式基本知识框架
- 1.1 元字符
- 1.2 字符集
- 1.3 断言
- 1.3.1 正向先行
- 1.3.2 正向后行
- 1.3.3 负向先行
- 1.3.4 负向后行
- 1.4 捕获和非捕获
- 1.5 贪婪和非贪婪
- 2. 怎么读
- 3. 怎么写
- 4. 参考文献
0. 引言
正则表达式本质上是一门语言,一门专用于匹配字符串的语言。
那么对于正则表达式这个语言工具而言,我们只需要了解其两个方面:
- 怎么读
满足能够看懂别人的正则表达式需求。 - 怎么写
满足能够按照给定需求写出对应正则表达式。
我们以一个例子开始,看看你现在能否读懂这个正则表达式:
^a(0\d{2,19}){9}\1-(?:\d{8})|b[xyt]*(ab)+[^uwv]?xy$|(\$|\\\.)*(?=\sfat)|yng(?!ubx)agi
1. 正则表达式基本知识框架
正则表达式所有概念如下,
以上概念,可以完成字符串匹配的所有闭环操作。
1.1 元字符
元字符和所有其他语言中的关键字一样,都有其特殊意义和特殊作用。个数不多,必须要记住的。
1.2 字符集
字符集整理了可以匹配的所有字符,在这里你可以找到所有想要匹配的字符。
1.3 断言
正则表达式光有匹配不够,匹配只能找到“符合规则的字符”,并返回。
但是我想找到“符合规则的字符1”的前边或后边的“符合规则的字符2”,返回字符2,那么就需要断言。
用作断言的字符1只做匹配规则并不返回,弥补元字符功能的不足。
举个例子,我只想找到只在“fat”前出现的“the”,如下图:
参考在线正则匹配网址regular expressions。
1.3.1 正向先行
(?=pattern)
匹配pattern表示式前边的字符, 即字符2规则写在pattern前边。
例如:匹配pattern前边的the,如下图实现,
1.3.2 正向后行
(?<=pattern)
匹配pattern表达式后边的字符,即字符2规则写在pattern后边。
例如:匹配pattern后边的the,如下图,
1.3.3 负向先行
(?!pattern)
匹配除去pattern表达式前边的字符,即返回所有不在pattern前边的字符2。
例如,匹配返回除去fat前的所有的the:
1.3.4 负向后行
(?<!pattern)
匹配除去pattern表达式后边的字符,即返回所有不在pattern后边的字符2。
例如:匹配返回除去fat后的所有the:
1.4 捕获和非捕获
捕获首先是基于小括号这个关键字的,每个小括号可以自定义一个字符。捕获是正则自动给小括号内容编组并编号,方便后边使用。
它是用来满足根据待匹配字符串中的内容来组织匹配规则的。
例如:找到两个相连的"以t开头以f结尾"的重复字符。
捕获和非捕获的区别在于是否指定分组,存入内存当中,用作其他匹配的引用。
- 如果仅仅用作自定义匹配,而不需要后边继续引用,则使用非捕获。
- 如上图,使用\1的分组,则需要捕获。
1.5 贪婪和非贪婪
贪婪尽量长的匹配,非贪婪匹配尽量短,非贪婪?放在数量词后边,进行限制。
贪婪匹配如下:
非贪婪匹配如下:
2. 怎么读
正则匹配的程序实现本质上是一个递归过程,递归问题是把原问题分解成最小子问题来依次解决,最终得到答案。
所以读正则表达式,第一步也是最关键的一步就是拆解成最小匹配串。
- 看有没有 | ,| 两遍的匹配串可直接拆分。
- 看有没有小括号,每对小括号包裹起来的,看成自定义子串,做单个字符看待。
- 小括号处理完毕后,剩下的就是字符集和限定符了,从左到右依次分析。
如下图,就是开头问题的分析结果,参考regexper网址:
3. 怎么写
读和写本质上是互逆过程,先完成最小子串需求,然后不断拼接成目标规则串。
- 拆解需求,拆解成能够用最小子串表达的匹配模式
- 将匹配模式拼接到一起
例如:找到与“ft”相邻的the。
- . 拆解需求
(1) 找到ft的前边the
(2) 找到ft的后边the
(3) 取或 - 正向先行the(?=ft) 和 正向后行(?<=ft)the
- 两者取或。 the(?=ft)|(?<=ft)the
如下图所示:
4. 参考文献
本文是基于以下参考文献学习的结果,属于精简版,详细请打开链接学习。
- github learn-regex
- 知乎老刘的回答
- 调试工具
正则表达式的学习总结相关推荐
- 正则不能输入特殊字符_正则表达式语法学习和在线练习
标题: 正则表达式语法学习和在线练习作者: 梦幻之心星 sky-seeker@qq.com标签: [#正则表达式,#语法,#学习,#练习]目录: [语法]日期: 2021-01-26 背景说明 正则表 ...
- JavaScript正则表达式的学习
JavaScript正则表达式的学习 1. 正则表达式概述 1.1 什么是正则表达式 正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式.在 JavaScrip ...
- 常用正则表达式及学习
正则表达式教程 学习地址:https://www.runoob.com/regexp/regexp-tutorial.html 测试地址:https://tool.oschina.net/regex/ ...
- Lab3因而起——对正则表达式的学习(二)
Lab3因而起--对正则表达式的学习(二) 一.Pattern和Matcher 一般来讲,比起String类,正则表达式的功能更为强大.对于正则表达式,可以通过java自带的包java.util.re ...
- Lab3因而起——对正则表达式的学习(一)
Lab3因而起--对正则表达式的学习(一) 在本次lab3实验中的正则表达式部分,对于从没学过正则表达式的小伙伴来说,可以说是困难重重,而我恰好属于其中之一,课堂上对正则表达式的接触皮毛显然没能满足这 ...
- 正则表达式从零开始学习系列(一)
正则表达式学习 -- 基本概念介绍 正则表达式,又称规则表达式.(英语:RegularExpression,在代码中常简写为regex.regexp或RE),计算机 科学的一个概念.正则表通常 ...
- Javascript正则表达式完全学习手册
正则表达式看起来很吓人,不容易让人亲近,但它的确很好用,可以很大程度上提高你的开发效率.本文从零开始介绍了应如何学习正则表达式.文中范例主要为JavaScript. 正则表达式可以很恐怖,真得很恐怖. ...
- python中re_Python中re(正则表达式)模块学习
今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...
- python中re模块_Python中re(正则表达式)模块学习
今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...
- JAVA -- 正则表达式高级学习技巧
什么是RE? 想必各位大大在做文件查找的时侯都有使用过万用字符"*",比如说想查找在Windows目录下所有的Word文件时,你可能就会用"*.doc"这样的方 ...
最新文章
- 还原活动目录完全手册
- Druid runningSqlCount 1 线上解决思路
- 新来的“大神”用策略模式把if else给“优化”了,技术总监说:能不能想好了再改?
- jQuery选择器 (详解)
- Modbus和RS485是什么关系
- GMQ集团推出全球创新型金融衍生品交易平台
- Linux---进程调度相关命令解析
- querywrapper 时间区间查询_雅思官方:关于增设用于英国签证及移民的雅思考试考点的通知!附20192020雅思考试时间安排...
- SpringBoot @Condition 注解
- 中国农田生产潜力数据集
- 3001.Linux维护和管理培训.实操考核A
- 大学生 计算机 毕业设计 xx管理系统 毕设(1)
- Tomcat安装及配置教程
- 各向异性(anisotropic)浅提
- 计算机共享后无法访问什么原因,共享文件在对方电脑无法访问是怎么回事?
- Feb23 小白《linux就该这么学》学习笔记5
- Android转接电话到iPhone,Android迁移数据到iPhone
- java基础-(六)-使用 Spring Initializr 创建springBoot项目
- HDU 6143 (容斥)
- 前端开发——Ionic 3.0【爱创课堂专业前端培训】
热门文章
- MATLAB批量按要求重命名图片/文件
- vue当中addRoutes动态添加路由白屏解决和next(),next(“/“)的一些区别
- 笔记本使用计算机的快捷键是什么,笔记本电脑截屏的快捷键是什么
- Python数据分析与展示:Series类型简单操作-8
- vue 调用pc端本地摄像头、麦克风实现拍照、录视频、录音 并上传到服务器指定树文件夹
- 点云向量 旋转 罗德里格斯(Rodrigues)变换Matlab
- matlab 旋转向量和旋转矩阵互转
- 使用Xpath提取猫眼电影标题,演员及剧情信息
- UVa515-King
- neosmart linux 光标,重装windows系统后原有的linux系统无法进入的解决办法。