正则表达式 先行/后发断言

参考资料

  1. 正则表达式的先行断言(lookahead)和后行断言(lookbehind)
  2. 正则表达式中分组功能高级用法
  3. 前瞻断言与后瞻断言
  4. 初心者歓迎!手と目で覚える正規表現入門・その4(最終回)「中級者テクニックをマスターしよう」

目录

  • 一. Positive Lookahead(正向先行断言)
    • 1.1 语法
    • 1.2 案例
  • 二. Positive Lookbehind(正向后发断言)
    • 2.1 语法
    • 2.2 案例
      • 2.2.1 步骤一:获取filename相关部分
      • 2.2.2 步骤二:获取filename对应的值
  • 三. Negative Lookahead(负向先行断言)
    • 3.1 语法
    • 3.2 案例
  • 四. Negative Lookbehind(负向后发断言)
    • 4.1 语法
    • 4.2 案例
  • 五. 综合案例
    • 5.1 `(?<=content=)[^,]+`
    • 5.2 `^(?!.*老师)[^,]+`
    • 5.3 `(?<=content=)(?!.*老师)[^,]+`
    • 5.4 `(?<=content=)(?!.*(老师|医生))[^,]+`


一. Positive Lookahead(正向先行断言)

1.1 语法

⏹语法:(?=...)

💦解释:匹配指定模式的前面的部分

1.2 案例

👇👇👇有如下所示的文本👇👇👇

John:guitar, George:guitar, Paul:bass, Ringo:drum
Freddie:vocal, Brian:guitar, John:bass, Roger:drum

⏹查找:bass之前的部分(匹配结果不包含:bass)

  • 正则表达式:\S+(?=:bass)

在这里插入图片描述


二. Positive Lookbehind(正向后发断言)

2.1 语法

⏹语法:(?<=...)

💦解释:匹配指定模式的后面的部分

2.2 案例

👇👇👇有如下所示的文本👇👇👇

type=zip; filename=users.zip; size=1024;
type=xml; filename=posts.xml; size=2048;

⏹查找filename,也就是要获取出users.zipposts

2.2.1 步骤一:获取filename相关部分

⏹先通过如下正则表达式获取出filename部分

  • filename=[^;]+
    • [^;] 是一个字符集,用于匹配除了分号之外的任何单个字符。
    • + 是一个量词,表示匹配前面的字符集一个或多个次数。

在这里插入图片描述

2.2.2 步骤二:获取filename对应的值

⏹正则表达式:

  • (?<=filename=)[^;]+
    • 在一个字符串中,查找 filename= 后面紧跟着的字符串,直到遇到分号 ; 为止。
    • 该正则表达式会匹配并提取这个字符串,而不包括 filename= 和分号 ;

在这里插入图片描述


三. Negative Lookahead(负向先行断言)

3.1 语法

⏹语法:(?!...)

💦解释:匹配指定模式之外前面的部分

3.2 案例

👇👇👇有如下所示的文本👇👇👇

I love apples; Test;
I love bananas; Test;
I love oranges; Test;
I love grapes; Test;

⏹正则表达式:

  • love\s(?!bananas).*?;
    • love\s:匹配字面量的字符串 love,后跟一个空格字符(\s 表示空白字符,包括空格、制表符等)。
    • (?!bananas):负向先行断言,确保在当前位置后面不跟随 bananas。这意味着如果 love 后面是 bananas,匹配将会失败。
    • .*?;:非贪婪模式匹配任意数量的任意字符(除了换行符),直到匹配到第一个;为止
      在这里插入图片描述
  • love\s(?!bananas)[^;]+
    • (?!bananas):负向先行断言,确保在当前位置后面不跟随 bananas。这意味着如果 love 后面是 bananas,匹配将会失败。
    • [^;]+:匹配一个或多个不是分号 ; 的字符。[^;] 是一个字符集,表示除了分号以外的任意字符。
    • + 表示匹配前面的字符集一个或多个次数。
      在这里插入图片描述

四. Negative Lookbehind(负向后发断言)

4.1 语法

⏹语法:(?<!...)

💦解释:匹配指定模式之外后面的部分

4.2 案例

👇👇👇有如下所示的文本👇👇👇

  • 日本只有东京都和京都,除了这两个都之外的所有都是不合理的,现在要求获取该数据。
東京都
千葉県
神奈川県
埼玉都
测试都
京都

⏹正则表达式:

  • ^(?!東京|京).*都
    • ^(?!東京|京):确保行的开始位置后不是 東京
    • .*都:匹配任意字符,直到遇到都

在这里插入图片描述


五. 综合案例

👇👇👇有如下所示的文本👇👇👇

content=张三老师,你好
content=张三医生,你好
content=李四医生,你好
content=李四老师,你好
content=张三司机,你好
content=王五工程师,你好

5.1 (?<=content=)[^,]+

⏹获取content=之后的部分,截止到,为止

在这里插入图片描述

5.2 ^(?!.*老师)[^,]+

⏹行内不能有 老师 ,并且截止到 , 部分

在这里插入图片描述

5.3 (?<=content=)(?!.*老师)[^,]+

⏹获取content=之后的部分,截止到,为止,并且匹配到的内容中不能有老师这两个字

在这里插入图片描述

5.4 (?<=content=)(?!.*(老师|医生))[^,]+

⏹获取 content= 之后的部分,截止到 , 为止,并且匹配到的内容中不能有老师医生
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3270018.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

AmyloidPETNet:使用端到端深度学习对脑PET成像中的淀粉样阳性进行分类| 文献速递-AI辅助的放射影像疾病诊断

Title 题目 AmyloidPETNet: Classification of Amyloid Positivity in Brain PET Imaging Using End-to-End Deep Learning AmyloidPETNet&#xff1a;使用端到端深度学习对脑PET成像中的淀粉样阳性进行分类 01 文献速递介绍 阿尔茨海默病 (AD) 的一个病理异常是脑内淀粉样…

JavaScript——常用库

文章目录 绪论jQuery选择器事件修改 css查找ajax setTimeout与setIntervalsetTimeoutsetInterval requestAnimationFrameMap与SetlocalStorageJSONDateWebSocketwindowcanvas结语 绪论 『时间是伟大的作家&#xff0c;总会写下完美的结局。』—— 「秋之回忆」 jQuery 这个是优…

AI绘画:艺术与科技融合的新篇章

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI绘画作为一种新兴的艺术形式&#xff0c;正逐步改变着传统艺术创作的格局。从早期的简单模仿到如今的个性化创作&#xff0c;AI绘画不仅提升了艺术创作的效率和质量&#xff0c;还开辟了全新的应用场景和商…

sizeof和strlen区别

如图&#xff0c;sizeof来计算的时候&#xff0c;得出的是计算机用多少个字节来表示一个地址 而strlen来计算的时候&#xff0c;只是计算出他的有效字符长度 打印出的不同地址就是其不同的区别

【深海王国】小学生都能玩的单片机!番外1:Arduino家族Uno-Mega-Nano-Pro Mini-ATtiny85的使用指南(3)

Hi٩(๑ ^ o ^ ๑)۶, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来单片机的番外系列——小学生都能玩的单片机&#xff01;番外1带你快速学习认识Arduino家族&#xff1a;Uno、Mega、Nano、Pro Mi…

Java小抄|使用StopWatch输出执行耗时

文章目录 背景常用接口定义demo1 统计输出的总耗时demo2 统计最后一个任务的耗时demo3 统计多个任务的耗时占比 背景 StopWatch是spring-framwork提供的一个可以对任务执行时间进行控制的类&#xff0c;方便记录任务的开始时间和结束时间 常用接口定义 getTotalTimeSeconds(…

秒懂C++之string类(下)

目录 一.接口说明 1.1 erase 1.2 replace&#xff08;最好别用&#xff09; 1.3 find 1.4 substr 1.5 rfind 1.6 find_first_of 1.7 find_last_of 二.string类的模拟实现 2.1 构造 2.2 无参构造 2.3 析构 2.4.【】运算符 2.5 迭代器 2.6 打印 2.7 reserve扩容 …

网络通信---TCP协议1

今日内容 三次握手: 指建立tcp连接时&#xff0c;需要客户端和服务端总共发送三次报文确认连接。 四次挥手&#xff1a; 断开一个tcp连接&#xff0c;需要客户端和服务端发送四个报文以确认断开。 编程模型 TCP报文 客户端 服务端

Charles实战(三)

第一章节&#xff1a;过滤 Filter Focus Recording Settings - Include Filter Focus 第二章&#xff1a;重发 简单重发&#xff1a;鼠标右键- Repeat 简单压力&#xff1a; 鼠标右键 - Repeat Advanced Iterations:重复发送多少次 20 Concurrency:每次发几组请求&#x…

23 Python常用内置函数——map()

内置函数 map() 把一个函数 func 依次映射到序列或迭代器对象的每个元素上&#xff0c;并返回一个可迭代的 map 对象作为结果&#xff0c;map 对象中的每个元素是原序列中元素经过函数 func 处理后的结果&#xff0c;map() 函数不对原序列或迭代器对象做任何修饰。 print(map(…

数字图像处理和机器视觉中的常用特殊矩阵及MATLAB实现详解

一、前言 Matlab的名称来源于“矩阵实验室&#xff08;Matrix Laboratory&#xff09;”&#xff0c;其对矩阵的操作具有先天性的优势&#xff08;特别是相对于C语言的数组来说&#xff09;。在数字图像处理和机器视觉实践中&#xff0c;为了提高编程效率&#xff0c;MATLAB 提…

ResT v2 论文解读

paper&#xff1a;ResT V2: Simpler, Faster and Stronger official implementation&#xff1a;https://github.com/wofmanaf/ResT 出发点 ResTv2的设计目标是改进先前版本ResTv1的结构&#xff0c;以提高模型的效率和性能。ResTv1通过引入多尺度注意力机制&#xff08;EMS…

深入源码:解析SpotBugs静态代码分析框架 0

文章目录 引言SpotBugs概述启动附录 引言 SpotBugs是一个开源的Java静态分析工具&#xff0c;旨在帮助开发人员检测Java代码中的潜在缺陷和漏洞。以下是对SpotBugs的详细解释&#xff1a; SpotBugs概述 定义与功能&#xff1a;SpotBugs是FindBugs的继任者。FindBugs是一个广受…

甲方产品过于平庸该如何编写策划案?

面对甲方产品相对平庸的情况&#xff0c;作为策展新人&#xff0c;你需要发挥创意和策略思维&#xff0c;通过巧妙的策划来挖掘和呈现产品的独特价值&#xff0c;让观众在展馆中依然能找到吸引他们的亮点。 以下是一些建议&#xff0c;希望能帮助你编写出既真实又能吸引眼球的…

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(2)登录,注册功能实现

技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 登陆页面如下 在这个页面中我们实现了一个登录页面和一个注册页面的Jsp文件&#xff0c;和两个java 的服务层文件 分别是web包下的denglu.jsp和zhuce.jsp以…

【Django】js实现简单计算器

文章目录 完整html写script写views写urls ##需求 ##实验 完整html {% load static %} <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

【JUC】Java锁介绍

文章目录 阿里锁开发规范乐观锁和悲观锁悲观锁乐观锁 synchronized 类锁、对象锁synchronized有三种应用方式锁相关的8种案例演示&#xff08;对象锁、类锁&#xff09;标准访问ab两个线程&#xff0c;请问先打印邮件还是短信&#xff1f;sendEmail钟加入暂停3秒钟&#xff0c;…

c++入门----类与对象(中)

OK呀&#xff0c;家人们承接上文&#xff0c;当大家看过鄙人的上一篇博客后&#xff0c;我相信大家对我们的c已经有一点印象了。那么我们现在趁热打铁再深入的学习c入门的一些知识。 类的默认成员函数 首先我们学习的是我们的默认函数。不知道大家刚读这个名词是什么反应。默认…

鱼哥好书分享活动第27期:看完这篇《云原生安全》了解云原生环境安全攻防实战技巧!

鱼哥好书分享活动第27期&#xff1a;看完这篇《云原生安全》了解云原生安全攻防实战技巧&#xff01; 主要内容&#xff1a;读者对象&#xff1a;本书目录&#xff1a;了解更多&#xff1a;赠书抽奖规则: 当前全球数字化的发展逐步进入深水区&#xff0c;云计算模式已经广泛应用…

【Linux C | 网络编程】简易进程池的实现详解(一)

进程池&#xff08;Process Pool&#xff09;是一种并发编程的模型&#xff0c;用于管理和复用多个进程&#xff0c;以提高系统的效率和性能。它主要解决的问题是减少因频繁创建和销毁进程而带来的性能开销&#xff0c;特别是在需要处理大量并发任务时尤为有效。 主要组成部分…