正则表达式的基本概念
作者:秋水 来源:蓝色理想 发布时间:2007-10-17 21:07:00
经常看到说正则的文章,但说的只是方法,却很少有说以下几个基本概念:
1.贪婪:+,*,?,{m,n}等默认是贪婪匹配,即尽可能多匹配,也叫最大匹配
如果后面加上?,就转化为非贪婪匹配,需要高版本支持
2.获取:默认用(x|y)是获取匹配,很多时候只是测试,不一定要求得到所匹配的数据,
尤其在嵌套匹配或大数据中就要用非获取匹配(?:x|y),这样提高了效率,优化了程序。
3.消耗:默认是消耗匹配,一般在预查中是非消耗匹配。
举个例子,2003-2-8要变为2003-02-08
如果用/-(\d)-/第二次匹配将从8开始,从而只替换第一个2,错误
如果用/-(\d)(?=-)/则第二次匹配从第二个-开始,即不消耗字符-
4.预查:js中分为正向预查和负向预查
如上面的(?=pattern)是正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。
还有(?!pattern)是负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。
负向预查有时会用在对[^]的扩充,[^]只是一些字符,而?!可以使整个字符串。
5.回调:一般用在替换上,即根据不用的匹配内容返回不用的替换值,从而简化了程序,需要高版本支持
6.引用:\num 对所获取的第num个匹配的引用。
例如,'(.)\1\1' 匹配AAA型。'(.)(.)\2\1' 匹配ABBA型。
当然还有很多,这些都只是基本的但需要....
遇到正则问题,一般可用以下两种方法解决:
1.分类,即根据所有的可能列出各种情况,如2003以内的数
0 0
1-999 [1-9]\d{0,2}
1000-1999 1\d{3}
2000-2003 200[0-3]
所以最后的匹配就是 (0|[1-9]\d{0,2}|1\d{3}|200[0-3])
2.分组,即将整句分为不同的最小单元,如'、%、_成双出现
能成组的,即允许存在的,有
''
%% 如果是大于2的偶数个可细分为多个更小的2字符单元
__
[^'%_] 非以上字符
所以最后的匹配就是 ^(''|%%|__|[^'%_])*$


猜你喜欢
- 工欲善其事,必先利其器.python是解释型的语言,但是在windows下如果要执行程序的话还得加个python shell的话,
- 什么是YOLOV4YOLOV4是YOLOV3的改进版,在YOLOV3的基础上结合了非常多的小Tricks。尽管没有目标检测上革命性的改变,但
- Linux安装MySQL笔记1、在安装MySQL数据库服务器前,确保你的linux系统是可以连接网络的,下面我们将通过源码方式来安装mysq
- 写入:1:把gif图像文件读入内存(一个变量strTemp)。2:写入数据库。Dim binTmp() As
- golang中GOPATH的简单理解 1、为什么要配置GOPATH配置GOPATH的用意是为了方便项目的部署和构建,以及可以直接使用go g
- 1、由于国外网站太慢,所以这里使用的是阿里的镜像https://mirrors.aliyun.com/pypi/simple/2、去官网查看
- 图例如下https://github.com/Dongvdong/python_Smartvoice上电后,只要周围声音超过 2000,开始
- 先看看那种容易被注入的SQL id = 11001 sql = """
- 本文作为属性篇的最后一篇文章, 将讲述HTML和CSS的关键—盒子模型(Box model). 理解Box model的关键便是margin
- 错误提示: Warning: session_start() [function.session-start]: Cannot send s
- show profile是由Jeremy Cole捐献给MySQL社区版本的。默认的是关闭的,但是会话级别可以开启这个功能。开启它可以让My
- win10,直接使用 pip install tesserocr 的命令如果输出如下错误提示:tesserocr.cpp(596): fat
- 示例首先模拟一个业务场景,有订单、产品、自定义订单三个结构体,订单中包含多个产品:type Order struct {Id
- 一 MySQL WorkbenchMySQL Workbench提供DBAs和developers一个集成工具环境:1)数据库设计和建模2)
- 使用了python中的pexpect模块,在测试代码之前,可输入python进入交互界面,输入help('pexpect')
- Vue2.0删除了很多1.0的比较实用的过滤器,如filterBy,orderBy。官方文档给了通过计算属性实现1.0搜索过滤器功能,自己又
- 当前需求:有group和factor两张表,一个group对应多个factor,现在想查询有效的group和对应的有效的factor,两个表
- 写这个的目地,主要是系统理下目前产品设计的流程,提醒自己尽量去避免一些常见的问题,也能让大家系统的了解天极网的产品设计流程。当然,不保证任何
- 安装SDK:pip install baidu-aip如果在pycharm里也可以在setting----Project Interpret
- 1.在百度地图申请密钥: http://lbsyun.baidu.com/ 将<script type="tex