正则表达式中 前瞻,后顾,负前瞻,负后顾等整理
文章目录
- 正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?<=pattern)和(?<!pattern)
- (?:pattern)
- (?=pattern)
- (?!pattern)
- (?<=pattern)
- (?<!pattern)
正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?<=pattern)和(?<!pattern)
转载整理至
https://www.cnblogs.com/dogecheng/p/11466687.html
https://www.cnblogs.com/dplearning/p/5897316.html
前瞻: exp1(?=exp2) 查找exp2前面的exp1
后顾: (?<=exp2)exp1 查找exp2后面的exp1
负前瞻: exp1(?=exp2) 查找后面不是exp2的exp1
负后顾: (?<=exp2)exp1 查找前面不是exp2的exp1
(?:pattern)
()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推
(?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来
import re
a = "123abc456ww"
pattern = "([0-9]*)([a-z]*)([0-9]*)"
print(re.search(pattern,a).group(0,1,2,3))
// ('123abc456', '123', 'abc', '456')pattern = "(?:[0-9]*)([a-z]*)([0-9]*)"
print(re.search(pattern,a).group(0,1,2))
// ('123abc456', 'abc', '456')
可以看到 (?:[0-9]) 匹配的第一个 [0-9] 没有保存下来,即没有保存匹配到的“123”,而([0-9]*)则保存了下来。
(?:pattern)在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如,‘industr(?:y|ies)’ 就是一个比 ‘industry|industries’ 更简略的表达式。因为我们单独存储下 “y” 或者 “ies” 没有什么意义
a = "British industry"
pattern = "industr(?:y|ies)"
print(re.search(pattern,a).group(0))
// (industry)
// group(1)会报错,因为没有保存捕获到的“y”pattern = "industr(y|ies)"
print(re.search(pattern,a).group(0, 1))
// ('industry', 'y')
(?=pattern)
正向肯定预查(look ahead positive assert),匹配pattern前面的位置。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
简单说,以 xxx(?=pattern)为例,就是捕获以pattern结尾的内容xxx
例如,“Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的"Windows”,但不能匹配"Windows3.1"中的"Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
简单说,以 xxx(?!pattern)为例,就是捕获不以pattern结尾的内容xxx
例如"Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?<=pattern)
反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。
简单说,以(?<=pattern)xxx为例,就是捕获以pattern开头的内容xxx。
例如,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。
(?<!pattern)
简单说,以(?<!pattern)xxx为例,就是捕获不以pattern开头的内容xxx。
反向否定预查,与正向否定预查类似,只是方向相反。例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。
正则表达式中 前瞻,后顾,负前瞻,负后顾等整理相关推荐
- php正则匹配preg_match,php正则表达式中preg_match函数的详解
我们之前给大家介绍了php正则表达式的使用,入门,以及验证邮箱地址,那么我们今天就想大家介绍php正则表达式中的函数preg_match,preg_match函数在php正则表达式中的规则是怎样的? ...
- 正则表达式前瞻(?=)、后顾(?<=)、负前瞻(?!)、负后顾(?<!)
前瞻(?=) exp1(?=exp2) 查找后面是exp2的exp1 正则表达式 字符串 匹配结果 abc(?=123) abc123 abc abc(?=123) kabc1234 abc abc( ...
- 【超详总结/理解:正则表达式】特点/元字符/正则表达式中的标志位-flag/RegExp/重复操作与后向引用/匹配模式/表达邮箱/正则表达式对象的方法/利用正则表达式限制网页表单里的文本框输入内容
文章目录 正则表达式: 正则表达式的用途 正则表达式的组成-元字符 正则表达式的特点 正则表达式中的标志位-flag JavaScript中的正则表达式解析 RegExp 定义 RegExp RegE ...
- 中鑫优配热点前瞻:国防军工+数据安全+燃料电池+煤炭
中鑫优配热点前瞻:国防军工+数据安全+燃料电池+煤炭 一.热点前瞻 热点一:国防军工 逻辑概述:苹果正在考虑使用钛合金制作iPad外壳,取代目前iPad上的铝合金外壳.与不锈钢相比,钛合金的硬度更高, ...
- 正则表达式中?=和?:和?!的理解
要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念: 前瞻: exp1(?=exp2) 查找exp2前面的exp1 后顾: (?<=exp2)exp1 查找exp2后面的exp1 ...
- 正则表达式中 ?=、?:、?: 的含义
要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念: // 前瞻: exp1(?=exp2) 查找exp2前面的exp1 // 后顾: (?<=exp2)exp1 查找exp2后面 ...
- js 正则表达式中的特殊字符
字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. -或- 对 ...
- python正则表达式中group
(一)正则表达式中的(-) 用于匹配括号内的任何正则表达式,并且指明组的开始和结束位置;可以在执行匹配之后检索组中的内容,并且可以在可以在字符串中使用\number来进行进一步的匹配,如下所述.当 ...
- 正则表达式中grep,sed的用法(包括基本的正则表达式和扩展的正则表达式)
一 正则表达式 Basic REGEXP:基本正则表达式 Extended REGEXP:扩展正则表达式 (正则表达式是使得计算机变成智能化的重要途径) 1.1 基本正则表达式 . : 表示匹配任 ...
最新文章
- php时间之差,PHP获得任意时间与当前时间的时间差
- [转载]WPF – 使用触发器
- 第九天学习Java的笔记(方法重载)
- BeetleX之FastHttpApi服务使用详解
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
- jdbc mysql wait_timeout_MySql wait_timeout问题解决办法。
- 高效通信模型之 - 异步通信模型
- Ngnix中的fastcgi参数性能优化和解释
- oracle 的控制结构
- Python读取微信朋友圈
- 计算机更新过后cad,升级windows10系统后cad无法打开的两种解决方法
- glsl 抗锯齿锯齿_什么是抗锯齿?
- 黑马前端基础-HTML-SE
- java.io.IOException: Unable to establish loopback connection
- C语言每日一练——第12天:求一个矩阵的转置
- 第二章02:初识批处理
- 计算机系统系统时间不准,windows7系统时间不对怎么办_windows7系统时间不准如何恢复-win7之家...
- 这是个404的时代 各种404的搞笑图片
- 基于python的影评数据分析_基于Python聚焦型网络爬虫的影评获取技术
- 红光光浴到底有没有用#大健康#红光光浴#红光#种光光学
热门文章
- 基于srs流媒体服务器搭建gb28181视频平台的微服务系统架构
- Shell语言-07-快捷键ctrl+A,E,C,L,U,K,Y,R,D,Z,S,Q
- 【RHCE】DNS域名解析服务器及正反向解析与主从同步简单配置
- Unity UGUI Batches合批规则详解(含源码)
- 解锁加密音乐,支持mgg mflac ncm kgm qmc等
- 【Java】HTTP请求工具类
- dos 命令——切换盘符与切换工作目录
- wampserver橙色解决方法汇总
- 区块链教程(2)——P2P交易原理
- 第一周------继续