文章目录

  • 正则表达式中(?: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"。

正则表达式中 前瞻,后顾,负前瞻,负后顾等整理相关推荐

  1. php正则匹配preg_match,php正则表达式中preg_match函数的详解

    我们之前给大家介绍了php正则表达式的使用,入门,以及验证邮箱地址,那么我们今天就想大家介绍php正则表达式中的函数preg_match,preg_match函数在php正则表达式中的规则是怎样的? ...

  2. 正则表达式前瞻(?=)、后顾(?<=)、负前瞻(?!)、负后顾(?<!)

    前瞻(?=) exp1(?=exp2) 查找后面是exp2的exp1 正则表达式 字符串 匹配结果 abc(?=123) abc123 abc abc(?=123) kabc1234 abc abc( ...

  3. 【超详总结/理解:正则表达式】特点/元字符/正则表达式中的标志位-flag/RegExp/重复操作与后向引用/匹配模式/表达邮箱/正则表达式对象的方法/利用正则表达式限制网页表单里的文本框输入内容

    文章目录 正则表达式: 正则表达式的用途 正则表达式的组成-元字符 正则表达式的特点 正则表达式中的标志位-flag JavaScript中的正则表达式解析 RegExp 定义 RegExp RegE ...

  4. 中鑫优配热点前瞻:国防军工+数据安全+燃料电池+煤炭

    中鑫优配热点前瞻:国防军工+数据安全+燃料电池+煤炭 一.热点前瞻 热点一:国防军工 逻辑概述:苹果正在考虑使用钛合金制作iPad外壳,取代目前iPad上的铝合金外壳.与不锈钢相比,钛合金的硬度更高, ...

  5. 正则表达式中?=和?:和?!的理解

    要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念: 前瞻: exp1(?=exp2) 查找exp2前面的exp1 后顾: (?<=exp2)exp1 查找exp2后面的exp1 ...

  6. 正则表达式中 ?=、?:、?: 的含义

    要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念: // 前瞻: exp1(?=exp2) 查找exp2前面的exp1 // 后顾: (?<=exp2)exp1 查找exp2后面 ...

  7. js 正则表达式中的特殊字符

    字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. -或- 对 ...

  8. python正则表达式中group

    (一)正则表达式中的(-)   用于匹配括号内的任何正则表达式,并且指明组的开始和结束位置;可以在执行匹配之后检索组中的内容,并且可以在可以在字符串中使用\number来进行进一步的匹配,如下所述.当 ...

  9. 正则表达式中grep,sed的用法(包括基本的正则表达式和扩展的正则表达式)

    一 正则表达式   Basic REGEXP:基本正则表达式 Extended REGEXP:扩展正则表达式 (正则表达式是使得计算机变成智能化的重要途径) 1.1 基本正则表达式 . : 表示匹配任 ...

最新文章

  1. php时间之差,PHP获得任意时间与当前时间的时间差
  2. [转载]WPF – 使用触发器
  3. 第九天学习Java的笔记(方法重载)
  4. BeetleX之FastHttpApi服务使用详解
  5. 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
  6. jdbc mysql wait_timeout_MySql wait_timeout问题解决办法。
  7. 高效通信模型之 - 异步通信模型
  8. Ngnix中的fastcgi参数性能优化和解释
  9. oracle 的控制结构
  10. Python读取微信朋友圈
  11. 计算机更新过后cad,升级windows10系统后cad无法打开的两种解决方法
  12. glsl 抗锯齿锯齿_什么是抗锯齿?
  13. 黑马前端基础-HTML-SE
  14. java.io.IOException: Unable to establish loopback connection
  15. C语言每日一练——第12天:求一个矩阵的转置
  16. 第二章02:初识批处理
  17. 计算机系统系统时间不准,windows7系统时间不对怎么办_windows7系统时间不准如何恢复-win7之家...
  18. 这是个404的时代 各种404的搞笑图片
  19. 基于python的影评数据分析_基于Python聚焦型网络爬虫的影评获取技术
  20. 红光光浴到底有没有用#大健康#红光光浴#红光#种光光学

热门文章

  1. 基于srs流媒体服务器搭建gb28181视频平台的微服务系统架构
  2. Shell语言-07-快捷键ctrl+A,E,C,L,U,K,Y,R,D,Z,S,Q
  3. 【RHCE】DNS域名解析服务器及正反向解析与主从同步简单配置
  4. Unity UGUI Batches合批规则详解(含源码)
  5. 解锁加密音乐,支持mgg mflac ncm kgm qmc等
  6. 【Java】HTTP请求工具类
  7. dos 命令——切换盘符与切换工作目录
  8. wampserver橙色解决方法汇总
  9. 区块链教程(2)——P2P交易原理
  10. 第一周------继续