简单明了的正则表达式汇总
简单明了的正则表达式汇总!!!
资源来源:编程胶囊官网
基础正则总结
实例 | 描述 |
---|---|
[Pp]ython | 匹配“Python”或“python”。 |
rub[ye] | 匹配“ruby”或"rube"。 |
[abcdef] | 匹配中括号内的任意一个字母。 |
[0-9] | 匹配任何数字。类似于[1234567890]。 |
[a-z] | 匹配任何小写字母。 |
[A-Z] | 匹配任何大写字母。 |
[a-zA-Z0-9] | 匹配任何字母及数字。 |
[^au] | 除了au字母以外的所有字符。 |
[^0-9] | 匹配除了数字外的字符。 |
实例 | 描述 |
---|---|
. | 匹配除“\n”之外的任何单个字符。要匹配包括‘\n’在内的任何字符,请使用像‘[.\n]’的模式 |
? | 匹配一个字符零次或一次,另一个作用是非贪婪模式 |
+ | 匹配一次或多次 |
* | 匹配零次或多次 |
\b | 匹配一个长度为0的子串 |
\d | 匹配一个数字字符。等价于[0-9]。 |
\D |
匹配一个非数字字符。等价于 [^0-9] 。
|
\s |
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v] 。
|
\S |
匹配任何非空白字符。等价于[^ \f\n\r\t\v] 。
|
\w | 匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]。 |
\W |
匹配任何非字母、数字、下划线。等价于[^A-Za-z0-9_] 。
|
进阶部分
分组
在正则表达式中还提供了一种将表达式分组的机制,当使用分组时,除了获得整个匹配。还能够在匹配中选择每一个分组。
要实现分组很简单,使用()
即可。
这段正则表达式将文本分成了两组,第一组为:0731
,第二组为8825951
。
分组有一个非常重要的功能——捕获数据
。所以()
被称为捕获分组,用来捕获数据,当我们想要从匹配好的数据中提取关键数据的时候可以使用分组。
(\d{4})
和 (\d{7})
就分别捕获了两段数据:
0731
8825951
或者条件
使用分组的同时还可以使用 或者(or
)条件。
例如要提取所有图片文件的后缀名,可以在各个后缀名之间加上一个 |
符号:
非捕获分组
有时候,我们并不需要捕获某个分组的内容,但是又想使用分组的特性。
这个时候就可以使用非捕获组(?:表达式)
,从而不捕获数据,还能使用分组的功能。
例如想要匹配两个字母组成的单词或者四个字母组成的单词就可以使用非捕获分组:
分组使用技巧
日期可以有很多格式,例如:
20200102
2020-01-02
2020-1-2
2020.01.02
2020 01 02
2020 1 2
2020/01/02
现在我们想要使用正则表达式将其中的年月日
全都提取出来。
可以发现他们唯一的区别就在于分隔符和月份与日期,这个时候可以使用[]
来匹配多种情况。
例如:
通过(\d{4})[-./\s]?(\d{1,2})[-./\s]?(\d{1,2})
就可以从文本中将年月日分别提取出来了。
虽然这段正则表达式看起来内容挺多,但是还是很容易理解的,[-./\s]
表示匹配三个可能出现的分隔符-./
和空白
,?
表示匹配它们0
次或者1
次,其他年月日的数据使用\d{N}
与分组结合就可以提取到目标数据。
分组的回溯引用
正则表达式还提供了一种引用之前匹配分组的机制,有些时候,我们或许会寻找到一个子匹配,该匹配接下来会再次出现。
例如,要匹配一段 HTML 代码,比如:0123<font>提示</font>abcd
,可能会编写出这样一段正则表达式:
这确实可以匹配,不过可能还有另一种情况,如果数据改成这样:<font>提示</bar>
在这里font
和 bar
明显不是一对正确的标签,但是我们编写的正则表达式还是将它们给匹配了,所以这个结果是错误的。
我们想让后面分组的正则也匹配font
,但是现在所有形式的都会匹配。
那如果想让后面分组的正则和第一个分组的正则匹配同样的数据该如何做呢?
可以使用分组的回溯引用,使用\N
可以引用编号为N
的分组,因此上述例子的代码我们可以改为:
通过这个例子,可以发现 \1
表示的就是第一个分组,在这里第一个分组匹配的是 font
所以\1
就代表font
。
正向先行断言
很多人也称先行断言和后行断言为环视,也有人叫预搜索,其实叫什么无所谓,重要的是知道如何使用它们!
先行断言和后行断言总共有四种:
- 正向先行断言
- 反向先行断言
- 正向后行断言
- 反向后行断言
正向先行断言:(?=表达式)
,指在某个位置向右看,表示所在位置右侧必须能匹配表达式
例如:
我喜欢你 我喜欢 我喜欢我 喜欢 喜欢你
如果要取出喜欢两个字,要求这个喜欢后面有你,这个时候就要这么写:喜欢(?=你)
,这就是正向先行断言。
提取包含大小写字母的字符串
先行断言可以用来判断字符串是否符合特定的规则,例如提取包含至少一个大小写字母的字符串:
(?=.*?[a-z])(?=.*?[A-Z]).+
这段正则表达式规定了匹配的字符串中必须包含至少一个大写和小写的字母。
反向先行断言
反向先行断言(?!表达式)
的作用是保证右边不能出现某字符。
例如: 我喜欢你 我喜欢 我喜欢我 喜欢 喜欢你
如果要取出喜欢两个字,要求这个喜欢后面没有你,这个时候就要这么写:喜欢(?!你)
,这就是反向先行断言。
正向后行断言
本小节只需要你记住一句话:先行断言和后行断言只有一个区别,即先行断言从左往右看,后行断言从右往左看。
正向后行断言:(?<=表达式)
,指在某个位置向左看,表示所在位置左侧必须能匹配表达式
例如:如果要取出喜欢两个字,要求喜欢的前面有我,后面有你,这个时候就要这么写:(?<=我)喜欢(?=你)
。
反向后行断言
反向后行断言:(?<!表达式)
,指在某个位置向左看,表示所在位置左侧不能匹配表达式
例如:如果要取出喜欢两个字,要求喜欢的前面没有我,后面没有你,这个时候就要这么写:(?<!我)喜欢(?!你)
。
想要学习更多的正则表达式和在线训练请访问:
编程胶囊、https://regexr-cn.com/
如果您觉得本文还不错,还望点个赞支持一下!
简单明了的正则表达式汇总相关推荐
- 也许开发需要的只是一份简单明了的表格
本人原先是一名移动端开发工程师,本来是要一条道走到黑,准备做个it大咖,结果事与愿违,走到了测试的道路上.今天介绍一件通信测试上发生的事. 公司为青海移动做个项目,处于系统测试阶段,对各个系统进行测试 ...
- PHP常用正则表达式汇总 [复制链接]
PHP常用正则表达式汇总 [复制链接] 上一主题下一主题 离线我是小猪头 法师 发帖 539 加关注 发消息 只看楼主 倒序阅读 使用道具楼主 发表于: 2011-06-22 更多 - 本帖被 ...
- 常用的PHP正则表达式汇总
原文:常用的PHP正则表达式汇总 PHP中的常用正则表达式集锦: 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包 ...
- 前端神器之Sublime Text2/3简单明了使用总结
为什么叫神器呢? 我总结如下: 第一:也是最重要的,它占内存很小(就如同notepad++那般迅速打开,所以那款其实也不错~).一般IDE比如WebStorm(它也是一款神器来着),Aptana(也比 ...
- Python面向对象编程(类编程)中self的含义详解(简单明了直击本质的解释)
以下是博主认为的对self讲解得比较透彻又简洁明了的资料. 上面的资料把这个问题说得简单明了,大家认真看一遍相信就对self有个深入的了解了. 总结一下: 在Python为面向对象编程中,成员函数被调 ...
- 最简单明了的QQ在线客服代码
最近老用来QQ在线客服代码,网上找的都不太顺手,自己写一个简单,只上下飘动. 源码下载:网站被封了,源码下载不了,但是这个源码很简单,相信有点基础的人都知道怎样用. floatAd.js代码如下: v ...
- 简单明了实现Java地图小程序项目
简单明了实现Java地图小程序项目 ✨博主介绍 前言 地图概述 地图技术 地图应用场景 网约车服务 智能穿戴 智能物流 智能景区 车联网 国内常见地图 地图API与搜索 JS API GL(演示百度地 ...
- 【log4j 2.x】【log4j日志升级漏洞修复】log4j2日志 [简单明了][一眼就会]
大多同学说的不是很全,写的不是很具体. 在此,本人出一篇简单明了的详细教程: 先看效果: 目录: 1.加载log4j 2包 2.配置xml文件 3.写测试并运行 4.log指定文件:自动打印info. ...
- pattern java怎么用_Pattern Java设计模式23种每个一个举例使用,名称直接对应英文,简单明了 Develop 238万源代码下载- www.pudn.com...
文件名称: Pattern下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 156 KB 上传时间: 2014-05-17 下载次数: 2 提 供 者: 王小雄 详 ...
最新文章
- Netscape Mozilla源代码指南
- 为什么我的Button文本被迫在Lollipop上全部大写?
- 网传:Vue涉及国家安全漏洞?尤雨溪亲自发文回应!
- linux kernel中的module_init/initcall代码导读
- CVX学习笔记(转载
- java读取视频时长
- python怎么写微分方程_python微分方程
- Linux 命令(16)—— chattr 与 lsattr 命令
- CentOS 7下mysqld服务启动失败终极解决方案
- Spark集群试运行
- 【CentOS】Tomcat的安装
- Twitter开源软件项目列表
- detail.html翻译中文,detail是什么意思_detail的翻译_音标_读音_用法_例句_爱词霸在线词典...
- tp-801bs单板微型计算机,线切割应知应会
- 外壳和接地层对天线的影响
- 解压缩文件常用命令——linux
- 迷宫问题(MAZE)
- js 获取所有被选中复选框的值
- 纺织erp有哪些,纺织企业为什么要上ERP
- 使用DiskGenius扩展C盘大小,遇见“您选择的分区不支持无损调整容量”
热门文章
- ¥3EG踩坑记录¥Vitis HLS xfopencv库的安装解决minGW32-make 编译opencv时 error
- 设计模式基础之类与类图
- 达梦mpp相当于oracle什么,DM7 达梦数据库 大规模并行处理 MPP (1) -- 基本概念和原理...
- 笔试题 - 训练部队(战斗力值和潜力值)
- 贤者之路, Caffe转TensorRT
- ZOJ 3380 Patchouli's Spell Cards [基础DP+大数]
- dpi px dip dp sp density 以及公式换算 整理
- k8s的网络插件kube-flannel.yml
- 学习笔记14--其他自动驾驶开发平台
- ZUCC_Linux系统管理_实验七 LVM