正则表达式 贪婪与非贪婪匹配

news2024/9/20 20:49:52

目录

  • 一. 回顾
  • 二. 遇到的问题
  • 三. 分析
  • 四. 解决
    • 4.1 转换为非贪婪模式匹配
    • 4.2 提高匹配的精度


一. 回顾

我们在正则表达式 分组与非捕获组这篇文章中,有如下分组匹配案例

<select name="fruit_console">
	<option value="apple" selected>苹果</option>
	<option value="banana">香蕉</option>
	<option value="orange">橘子</option>
	<option value="none"></option>
</select>

<option value="(\w+)"(?:\s+selected)?>(.+)<\/option>

  • 我们使用上述正则表达式分组匹配了option元素中的value和文本

在这里插入图片描述


二. 遇到的问题

😵如果option元素都在同一行的话,继续使用之前的正则表达式

<option value="(\w+)"(?:\s+selected)?>(.+)<\/option>

进行匹配的话

<select name="fruit_console">
	<option value="apple" selected>苹果</option><option value="banana">香蕉</option><option value="orange">橘子</option><option value="none"></option>
</select>

😒就会遇到下面的问题

  • apple是我们预期的匹配值
  • 但是匹配到苹果之后,还继续向后匹配到了很多预期外的数据
  • 预想的是匹配3组数据,但是实际只匹配到1组,而且匹配失败

在这里插入图片描述


三. 分析

⏹正则表达式有两种模式

  • 贪婪模式:尽可能的多匹配文本
    • 正则表达式默认情况下是贪婪模式
    • *+{} 都默认贪婪匹配
  • 非贪婪模式:会尽可能少的匹配文本
    • 在量词后面加上 ? 就可以转换为非贪婪匹配

⭐我们使用下面的正则表达式

<option value="(\w+)"(?:\s+selected)?>(.+)<\/option>

⭐匹配下面的HTML的时候

<option value="apple" selected>苹果</option><option value="banana">香蕉</option><option value="orange">橘子</option><option value="none"></option>

🤔当(.+)进行匹配的时候,由于html都在一行,当匹配到苹果的时候,由于苹果后面还有符合条件的文本,于是贪婪模式的(.+)会继续向后匹配,直到匹配到最后。


四. 解决

4.1 转换为非贪婪模式匹配

<option value="(\w+)"(?: selected)?>(.+?)<\/option>

  • 通过添加?,将贪婪的.+转换为非贪婪的.+?
  • 在非贪婪匹配模式下,(.+?)匹配到苹果之后,就不会继续向后匹配了

在这里插入图片描述

4.2 提高匹配的精度

<option value="(\w+)"(?: selected)?>([^<]+)<\/option>

  • [^<]+:匹配除了<之外的所有内容
  • 也就是说当匹配到>苹果<的时候,由于苹果的后面有一个<,因此就只会匹配到苹果,不会继续向后匹配
  • 从而完成了精确匹配

在这里插入图片描述

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

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

相关文章

银河麒麟V10使用vsn

环境:电脑windows11 ,系统银河麒麟V10的,通过堡垒机链接的,vsn也可以通过堡垒机链接,就相当于自己链接的时候不需要输入ip和端口号之类的, 目前银河麒麟机器上已经安装了vsn 步骤1:windows本地机器安装RealVNC https://www.realvnc.com/en/connect/download/viewer…

(三)springboot2.7.6集成activit5.23.0之流程跟踪高亮显示

1.引入diagram-viewer。 上一篇集成流程设计器时已经把diagram-viewer文件夹拷贝过来了。所以这一步就省略了。 2.引入依赖activiti-diagram-rest。 <dependency><groupId>org.activiti</groupId><artifactId>activiti-diagram-rest</artifactId…

设施农业智能化新引擎:AutoML让复杂农业算法唾手可得

&#xff08;于景鑫 北京市农林科学院智能装备技术研究中心&#xff09;近年来,人工智能技术蓬勃发展,大模型呈现出肆意生长之势,为各行各业带来新机遇。AutoML作为新一代自动化机器学习技术,承载着颠覆传统、引领变革的使命,正逐渐成为现代农业的"新宠"。本文将深入…

HCIP学习作业一 | HCIA复习

要求&#xff1a; R1-R2-R3-R4-R5 RIP 100 运行版本2 R6-R7 RIP 200 运行版本1 1.使用合理IP地址规划网络&#xff0c;各自创建环回接口 2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条目数量&#xff0c;R1-R2之间…

Suno声称在受版权保护的音乐上训练模型属于“合理使用“

继美国唱片业协会&#xff08;RIAA&#xff09; 最近对音乐生成初创公司 Udio 和 Suno 提起诉讼之后&#xff0c;Suno 在周四提交的一份法庭文件中承认&#xff0c;该公司确实使用了受版权保护的歌曲来训练其人工智能模型。但它声称&#xff0c;根据合理使用原则&#xff0c;这…

Uni-APP页面跳转问题(十六)

【背景】最近在做公司一个PAD端,谁被点检功能,主要时为了移动端点检设备和打印标签,需求比较简单就是扫描设备二维码,问题在于扫描后要能够重复进行多设备的扫描;早期开发的设备点检能够满足需求但是当连续扫描五六十个设备后,APP卡死,必须重启才能使用。 界面原图: 输…

智慧水务项目(四)django(drf)+angular 18 添加drf_yasg api接口文档

一、说明 文档api接口是必须的 本来准备用coreapi&#xff0c;据说drf_yasg更流弊 二、步骤 1、requirements.txt添加drf-yasg 2、settings.py中添加部分代码 drf_yasg需要与django.contrib.staticfiles配套使用&#xff0c;一般情况下&#xff0c;项目创建都会在INSTALLE…

PCG —— 基础使用

目录 一&#xff0c;基础知识 在关卡添加PCG资产 常见设置 调试 二&#xff0c;基础节点 Surface Sampler Static Mesh Spawner Transform Point Normal To Density Density Filter Bounds Modifier Self Prunning Difference Get Spline Data Spline Sampler …

LeetCode 热题 HOT 100 (015/100)【宇宙最简单版】

【栈】No. 0155 最小栈【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xff01; …

SAP EPPM-CPM(商业项目管理)模块简介

经过十几年的发展&#xff0c;SAP诞生了很多相关管理相关的模块&#xff0c;比如最经典的&#xff0c;无可替代的ERP核心组件之一的PS&#xff08;Project System&#xff09;模块&#xff0c;也有很多年历史的投资组合及项目管理PPM&#xff08;Portfolio Management and Proj…

GE电源维修 服务器 交换机电源维修CAR2512TE

GE电源维修 GV服务器电源维修 交换机电源维修 服务器电源模块维修的时候&#xff0c;我们先需要利用万用表检测一下各功率器件是否存在击穿短路&#xff0c;例如电源整流桥堆、开关管、高频大功率整流管、浪涌电流的大功率电阻是否烧断等&#xff0c;然后需要再检测各输出电压…

Kithara与Dlib (二) - 人脸实时检测

Kithara和Dlib进行人脸实时检测 目录 Kithara和Dlib进行人脸实时检测ResNet (残差网络)流程介绍核心代码性能测试开源源码 ResNet (残差网络) ResNet&#xff0c;全称为Residual Network&#xff08;残差网络&#xff09;&#xff0c;是由何凯明&#xff08;Kaiming He&#x…

飞瓜数据没有视频号爆款视频你就错过了涨粉的最新方法!

为了帮助用户更快的了解用户需求并切入视频号营销中&#xff0c;也为大家提供了更多的垂直类目。 飞瓜数据 飞瓜数据为很多视频平台提供了视频相关的数据服务&#xff0c;但我们发现并飞瓜并没有参与视频号相关的内容仅在视频号直播做了相关的扩展。视频号相关的数据并未提供。…

Java中等题-多数元素2(力扣)【摩尔投票升级版】

给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;[3] 示例 2&#xff1a; 输入&#xff1a;nums [1] 输出&#xff1a;[1]示例 3&#xff1a; 输入&#xff1a;num…

队列的基本运算(顺序,环形,链式)

以下分别介绍了顺序队列&#xff0c;环形队列&#xff0c;链式队列的基本运算。主要有五种基本运算&#xff1a;1.初始化队列&#xff0c;2.销毁队列&#xff0c;3.判断队列是否为空&#xff0c;4.进队列&#xff0c;5.出队。 目录 顺序队列 环形队列 链式队列 顺序队列与环…

《LeetCode热题100》---<5.③普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的五道题 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 方法一&#xff1a;将数组视为哈希表 class Solution {public int firstMissingPosi…

频率的工程测量01 - Rif算法的构造

1.原始文档 《用于正弦波频率估计的修正I-Rife算法》&#xff0c;王哲文&#xff0c;2024 DOI&#xff1a; 10. 16337/j. 1004‑9037. 2024. 02. 019 1.1 这篇论文所属的自科基金U21A20500&#xff1a;近5年所承担的重要科研项目表-智能感知系统与安全教育部重点实验室&#…

位运算(更新中)

一、基础知识 1.基础位运算 << 左移操作符 &按位与 有0就是0 >>右移操作符 | 按位或 有1就是1 ~按位取反 ^异或 相同为1&#xff0c;相异为0 /…

大模型检索X一键成片,巴黎奥运的AI新演绎

媒体智能与巴黎奥运的一场邂逅。 随着巴黎奥运会开幕式为全世界掀起一场文艺浪潮&#xff0c;塞纳河畔也从浪漫艺术的盛宴&#xff0c;转向体育竞技的击攘。让全世界不可错过巴黎前方的每刻高光&#xff0c;更需要一场多媒体技术的迎赶革新。 于是&#xff0c;我们看到另一场媒…

现代前端架构介绍(第三部分):深入了解状态管理层及其对前端App的影响

远离JavaScript疲劳和框架大战&#xff0c;了解真正重要的东西 在第二部分中&#xff0c;我们讨论了功能架构的三个层次。其中一个就是状态管理层&#xff0c;今天我们将对其进行更深入的探讨。下面是现代前端架构系列的第三部分和最后一部分介绍。 状态管理&#xff0c;你可能…