在上一篇博文里我们学习了基础的正则表达式,学会这些还不足以应对工作学习,现在开始学习进阶篇的正则表达式。

目录

1.分组

2.或者

3.分组回溯

4.先行断言

5.后行断言


1.分组

在正则表达式中提供了一种将表达式分组的机制,当使用分组时,除了获得整个匹配。还能够在匹配中选择每一个分组。分组的一个重要功能就是捕获数据,即将需要的数据在字符串中提取出来。使用()即可完成分组的操作。

如果我们仅想将字符分组却不捕获字符可以使用(?: 表达式)来实现

分组的实践:如下,我们需要将日期中的数字部分提取出来,可使用以下表达式

在上式中,\d{4}表示匹配4个数字,[-,/\s?]表示字符出现0或1次,\d{1,2}表示数字出现1或2次。

2.或者

有时我们想要提取的不是单一种类的字符而是多个字符,这是就可以使用或者|来实现

3.分组回溯

在分组中我们可以定义一个分组,这个分组在以后出现时可以直接用数字代替使用,使用\N可以引用编号为N的分组,注意分组与其子分组是同一个而不是同一类。

4.先行断言

先行断言可以分为两种:正向先行断言、反向先行断言

正向先行断言:(?=表达式),指在某个位置向右看,表示所在位置右侧必须能匹配表达式

在上图中我们需要的是喜欢你中的喜欢二字,即喜欢后必须有你才可。

反向先行断言:(?!表达式),作用是保证右边不能出现某字符。

上图中就是喜欢后面不能有你。

5.后行断言

后行断言与先行断言正好相反:先行断言从左往右看,后行断言从右往左看。

正向后行断言:(?<=表达式),指在某个位置向左看,表示所在位置左侧必须能匹配表达式

上图使用了正向先行断言以及正向后行断言,实现的功能是喜欢二字前有我,后有你。

反向后行断言:(?<!表达式),指在某个位置向左看,表示所在位置左侧不能匹配表达式

上图使用了反向先行断言以及反向后行断言,实现的功能是喜欢二字前没有我,后没有你。


到此为止,正则表达式已经基本结束了,这篇博文就当作日后学习的笔记吧。

搞懂正则表达式之进阶篇相关推荐

  1. 搞懂正则表达式之基础篇

    正则表达式是用来进行文本匹配的一种规则,在爬虫等方面应用很广,我之前也是一知半解,现在写下我再次学习的一些记录 首先推荐我学习的教程,正则练习网址: https://www.codejiaonang. ...

  2. C++两个函数可以相互递归吗_[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进

    [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...

  3. [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进

    [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...

  4. nginx location 正则表达式匹配多个地址_就是要让你搞懂Nginx,这篇就够了!

    Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好. Nginx 专为性能优化而开发,性能是其最重要 ...

  5. 就是要让你搞懂 Nginx,这篇就够了!

    来自:CSDN,作者:渐暖° 链接:https://blog.csdn.net/yujing1314/article/details/107000737 " Nginx 是一个高性能的 HT ...

  6. 就是要让你搞懂Nginx,这篇就够了!

    关注 前端瓶子君,回复"交流" 加入我们一起学习,天天进步 来自:CSDN,作者:渐暖° 链接:https://blog.csdn.net/yujing1314/article/d ...

  7. 全面解析|搞懂Nginx这一篇就够了

    前言 Nginx是一个http服务器,是一个使用c语言开发的高性能的http服务器及反向代理服务器.Nginx是一款高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由 ...

  8. 一篇文章带你搞懂应用层(万维网篇)

    每个应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的.应用层的具体内容就是规定应用进程在通信时所遵循的协议.应用层的许多协议都是基 ...

  9. 【转载】搞懂PointNet++,这篇文章就够了!

    论文标题:PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space 1 motivation 从名字 ...

最新文章

  1. 快速求斯特林数总结(洛谷模板题解)
  2. 独家 | 2018年Analytics Vidhya上最受欢迎的15篇数据科学和机器学习文章
  3. 在vim中设置将tab自动转化为4个空格
  4. 十、Docker快速搭建Elastic Stack(下篇)
  5. 数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡二叉树
  6. kali扫描内网ip_Metasploit路由转发实现内网渗透
  7. 鼠标移动到ul图片会摆动_我们可以从摆动时序分析中学到的三件事
  8. Hive常见问题汇总
  9. 第一个 Web 程序
  10. 深搜+广搜——Lake Counting S(洛谷 P1596)
  11. 计算机网络体系结构与数据通信(一) 概述
  12. 计算机网络单向ping通,单向可Ping通的原因与原理
  13. DBA01 - 数据库服务概述 构建MySQL服务器、数据库基本管理 MySQL数据类型
  14. 快速排序(划分函数partition和主元pivot选取)
  15. linux centos7增加文件夹权限,在Centos7系统中实现用户和文件权限的管理
  16. archlinux 安装搜狗输入法
  17. 洛谷3961 [TJOI2013]黄金矿工
  18. Google Play Store 下的软件something went wrong,please try again解决办法
  19. 实例四:switch分支选择——实现阶梯式计算
  20. 令人蛋疼的《西游记》。不笑,你拍我!

热门文章

  1. [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
  2. Android开发 - 设置DialogFragment全屏显示
  3. js替换iframe的内容
  4. 13_短信发送器_问题说明
  5. PYTHON 函数的返回值
  6. [Servlet]深入掌握Servlet
  7. eclipse设置和启动优化(转)
  8. 条款五:对应的new和delete要采用相同的形式
  9. 分享:根据svg节点对象类型和路径值转换坐标值
  10. SCRUM 敏捷开发 基础及失败成功案例分析