文章目录

  • 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. 引言

  正则表达式本质上是一门语言,一门专用于匹配字符串的语言。
  那么对于正则表达式这个语言工具而言,我们只需要了解其两个方面:

  1. 怎么读
    满足能够看懂别人的正则表达式需求。
  2. 怎么写
    满足能够按照给定需求写出对应正则表达式。

  我们以一个例子开始,看看你现在能否读懂这个正则表达式:

^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. 如果仅仅用作自定义匹配,而不需要后边继续引用,则使用非捕获。
  2. 如上图,使用\1的分组,则需要捕获。

1.5 贪婪和非贪婪

  贪婪尽量长的匹配,非贪婪匹配尽量短,非贪婪?放在数量词后边,进行限制。

贪婪匹配如下:

非贪婪匹配如下:

2. 怎么读

  正则匹配的程序实现本质上是一个递归过程,递归问题是把原问题分解成最小子问题来依次解决,最终得到答案。
  所以读正则表达式,第一步也是最关键的一步就是拆解成最小匹配串。

  1. 看有没有 | ,| 两遍的匹配串可直接拆分。
  2. 看有没有小括号,每对小括号包裹起来的,看成自定义子串,做单个字符看待。
  3. 小括号处理完毕后,剩下的就是字符集和限定符了,从左到右依次分析。

如下图,就是开头问题的分析结果,参考regexper网址:

3. 怎么写

  读和写本质上是互逆过程,先完成最小子串需求,然后不断拼接成目标规则串。

  1. 拆解需求,拆解成能够用最小子串表达的匹配模式
  2. 将匹配模式拼接到一起

例如:找到与“ft”相邻的the。

  1. . 拆解需求
    (1) 找到ft的前边the
    (2) 找到ft的后边the
    (3) 取或
  2. 正向先行the(?=ft) 和 正向后行(?<=ft)the
  3. 两者取或。 the(?=ft)|(?<=ft)the

如下图所示:

4. 参考文献

  本文是基于以下参考文献学习的结果,属于精简版,详细请打开链接学习。

  1. github learn-regex
  2. 知乎老刘的回答
  3. 调试工具

正则表达式的学习总结相关推荐

  1. 正则不能输入特殊字符_正则表达式语法学习和在线练习

    标题: 正则表达式语法学习和在线练习作者: 梦幻之心星 sky-seeker@qq.com标签: [#正则表达式,#语法,#学习,#练习]目录: [语法]日期: 2021-01-26 背景说明 正则表 ...

  2. JavaScript正则表达式的学习

    JavaScript正则表达式的学习 1. 正则表达式概述 1.1 什么是正则表达式 ​ 正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式.在 JavaScrip ...

  3. 常用正则表达式及学习

    正则表达式教程 学习地址:https://www.runoob.com/regexp/regexp-tutorial.html 测试地址:https://tool.oschina.net/regex/ ...

  4. Lab3因而起——对正则表达式的学习(二)

    Lab3因而起--对正则表达式的学习(二) 一.Pattern和Matcher 一般来讲,比起String类,正则表达式的功能更为强大.对于正则表达式,可以通过java自带的包java.util.re ...

  5. Lab3因而起——对正则表达式的学习(一)

    Lab3因而起--对正则表达式的学习(一) 在本次lab3实验中的正则表达式部分,对于从没学过正则表达式的小伙伴来说,可以说是困难重重,而我恰好属于其中之一,课堂上对正则表达式的接触皮毛显然没能满足这 ...

  6. 正则表达式从零开始学习系列(一)

    正则表达式学习 -- 基本概念介绍     正则表达式,又称规则表达式.(英语:RegularExpression,在代码中常简写为regex.regexp或RE),计算机 科学的一个概念.正则表通常 ...

  7. Javascript正则表达式完全学习手册

    正则表达式看起来很吓人,不容易让人亲近,但它的确很好用,可以很大程度上提高你的开发效率.本文从零开始介绍了应如何学习正则表达式.文中范例主要为JavaScript. 正则表达式可以很恐怖,真得很恐怖. ...

  8. python中re_Python中re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  9. python中re模块_Python中re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  10. JAVA -- 正则表达式高级学习技巧

    什么是RE? 想必各位大大在做文件查找的时侯都有使用过万用字符"*",比如说想查找在Windows目录下所有的Word文件时,你可能就会用"*.doc"这样的方 ...

最新文章

  1. 还原活动目录完全手册
  2. Druid runningSqlCount 1 线上解决思路
  3. 新来的“大神”用策略模式把if else给“优化”了,技术总监说:能不能想好了再改?
  4. jQuery选择器 (详解)
  5. Modbus和RS485是什么关系
  6. GMQ集团推出全球创新型金融衍生品交易平台
  7. Linux---进程调度相关命令解析
  8. querywrapper 时间区间查询_雅思官方:关于增设用于英国签证及移民的雅思考试考点的通知!附20192020雅思考试时间安排...
  9. SpringBoot @Condition 注解
  10. 中国农田生产潜力数据集
  11. 3001.Linux维护和管理培训.实操考核A
  12. 大学生 计算机 毕业设计 xx管理系统 毕设(1)
  13. Tomcat安装及配置教程
  14. 各向异性(anisotropic)浅提
  15. 计算机共享后无法访问什么原因,共享文件在对方电脑无法访问是怎么回事?
  16. Feb23 小白《linux就该这么学》学习笔记5
  17. Android转接电话到iPhone,Android迁移数据到iPhone
  18. java基础-(六)-使用 Spring Initializr 创建springBoot项目
  19. HDU 6143 (容斥)
  20. 前端开发——Ionic 3.0【爱创课堂专业前端培训】

热门文章

  1. MATLAB批量按要求重命名图片/文件
  2. vue当中addRoutes动态添加路由白屏解决和next(),next(“/“)的一些区别
  3. 笔记本使用计算机的快捷键是什么,笔记本电脑截屏的快捷键是什么
  4. Python数据分析与展示:Series类型简单操作-8
  5. vue 调用pc端本地摄像头、麦克风实现拍照、录视频、录音 并上传到服务器指定树文件夹
  6. 点云向量 旋转 罗德里格斯(Rodrigues)变换Matlab
  7. matlab 旋转向量和旋转矩阵互转
  8. 使用Xpath提取猫眼电影标题,演员及剧情信息
  9. UVa515-King
  10. neosmart linux 光标,重装windows系统后原有的linux系统无法进入的解决办法。