正则表达式 贪婪与非贪婪匹配
目录
- 一. 回顾
- 二. 遇到的问题
- 三. 分析
- 四. 解决
- 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>
[^<]+
:匹配除了<
之外的所有内容- 也就是说当匹配到
>苹果<
的时候,由于苹果
的后面有一个<
,因此就只会匹配到苹果
,不会继续向后匹配 - 从而完成了精确匹配
相关文章:
正则表达式 贪婪与非贪婪匹配
目录 一. 回顾二. 遇到的问题三. 分析四. 解决4.1 转换为非贪婪模式匹配4.2 提高匹配的精度 一. 回顾 我们在正则表达式 分组与非捕获组这篇文章中,有如下分组匹配案例 <select name"fruit_console"><option value"apple" selected&…...
LVS-DR模式集群:案例与概念
DR模式(直接路由) 概念 Direct Routing,简称DR模式采用半开放式的网络结构,与TUN模式的结构类似,但内网服务器并不是分散在各地,而是与调度器位于同一个物理网络负载调度器与内网服务器通过本地网络连接&a…...
小试牛刀-Telebot区块链游戏机器人(TS升级)
目录 1.编写目的 2.为什么使用TypeScript实现? 3.实现功能 3.1 AI图片生成 3.2 签到 3.3 邀请 3.4 WalletConnect连接 4.功能实现详解 4.1 AI图片生成 4.2 签到 4.3 邀请 4.4 WalletConnect连接 5.功能截图 6.问题整理 Welcome to Code Blocks blog 本篇文章主…...
使用SpringBoot+Vue3开发项目(2)---- 设计文章分类的相关接口及页面
目录 一.所用技术栈: 二.后端开发: 1.文章分类列表渲染: 2.新增文章分类: 3.编辑文章分类: 4.删除文章分类 : 5.完整三层架构后端代码: (1)Controller层:…...
django电商易购系统-计算机毕业设计源码61059
目 录 1 绪论 1.1选题背景 1.2研究意义 1.3论文结构与章节安排 2 电商易购系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 电商易购系统总…...
uniapp video播放视频 悬浮在屏幕无法滑动
背景: 在uniapp中,需要使用<video></video>标签进行播放动态src的视频。 1.在开发的时候,运行到浏览器,vedio标签正常;(使用HbuildX运行,运行 -->运行到浏览器)。 2.但是在打包成原生App&am…...
day22(mysql数据库主从搭建)
上午: 1、为mysql添加开机启动chkconfig 2、编辑配置文件my.cnf 3、修改环境变量 4、mysql角色授权 角色不生效 在配置文件中不添加activate_all_roles_on_loginon glibc安装,my.cnf在项目目录之下 rpm安装,my.cnf文件在/etc/my.cnf 5、自…...
C++——多态经典案例(三)计算器
案例:使用多态实现一个简单的计算器,计算两个数的加减乘除结果 分析:定义一个抽象类AbstractCalc ,其内部定义一个纯虚函数getResult,用于得到计算结果 定义加减乘除四个类,分别继承这个抽象类AbstractCal…...
超声波清洗机怎么选?超声波眼镜清洗机选择哪个牌子比较好?
对于许多近视的人来说,眼镜是至关重要的,因为它们帮助人们清晰地看到远处的物体。虽然很多人会定期擦拭和保养眼镜,但不少人对正确的清洁方法并不十分了解。那么,眼镜脏了该如何彻底清洁?如何确保在保养过程中不会划伤…...
24. 两两交换链表中的节点(Java)
目录 题目描述:示例 :代码实现: 题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换&am…...
【深度学习】【语音】TTS效果排行榜
TTS技术排行榜:顶尖模型详解及技术洞察 文本到语音(TTS)技术正以惊人的速度发展,为各种行业提供了更加自然和逼真的语音解决方案。本篇博客将详细介绍目前市场上表现最佳的TTS模型,深入探讨每个模型的技术特性和是否开源,帮助您更好地理解它们的优势和应用场景。 1. El…...
登录相关功能的优化【JWT令牌+拦截器+跨域】
登录相关功能的优化 登录后显示当前登录用户el-dropdown: Element - The worlds most popular Vue UI framework <el-dropdown style"float: right; height: 60px; line-height: 60px"><span class"el-dropdown-link" style"color: white;…...
2024年武汉东湖高新区职称第二批次开始了
众所周知,武汉市东湖高新区职称一年两批次,今年下半年第二批水平能力测试报名也已经开始了,请注意报名时间,别错过!! 2024年武汉东湖高新区第二批次水测报名时间:(一)网上…...
力扣面试经典算法150题:移除元素
移除元素 今日的题目依旧是力扣面试经典算法150题中数组相关的题目:移除元素 题目链接:https://leetcode.cn/problems/remove-element/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个排序数组 nums 和一个值 val&a…...
【爬虫实战】利用代理爬取Temu电商数据
引言 在行业竞争激烈、市场变化快速的跨境电商领域,数据采集可以帮助企业深入了解客户需求和行为,分析市场趋势和竞争情况,从而优化产品和服务,提高客户满意度和忠诚度。同时,数据采集可以实时跟踪库存水平和销售情况&…...
智谱 AI 开源视频生成模型CogVideoX:单张 4090 显卡即可推理
随着大型模型技术的持续发展,视频生成技术正逐步走向成熟。以Sora、Gen-3等闭源视频生成模型为代表的技术,正在重新定义行业的未来格局。 而近几个月,国产的AI视频生成模型也是层出不穷,像是快手可灵、字节即梦、智谱清影、Vidu、PixVerse V…...
Webpack、Vite区别知多少?
前端的项目打包,我们常用的构建工具有Webpack和Vite,那么Webpack和Vite是两种不同的前端构建工具,那么你们又是否了解它们的区别呢?我们在做项目时要如何选择呢? 一、工具定义 1、Webpack:是一个强大的静态模块打包工…...
【网络编程】网络原理(一)
系列文章目录 1、 初识网络 2、网络编程的基础使用(一) 文章目录 系列文章目录前言一、端口号的使用二、UDP报文学习1.报文格式2.MD5算法 总结 前言 在前文中,主要对UDP和TCP协议有了简单的了解,而这两种协议是负责传输层的内容…...
基于树莓派的智能家居中控系统:集成Flask、HTML、JavaScript与MQTT协议的文心一言AI接入(代码示例)
一、项目概述 随着智能家居技术的快速发展,越来越多的用户希望通过智能设备提升家居生活的便利性和智能化水平。本项目旨在搭建一个基于树莓派的AI接入文心一言智能家居中控系统。该系统能够根据AI获取的实时数据(如天气、温度、湿度等)自动…...
给出一组数的从大到小的排序索引
要在 Python 中获得一组数从大到小排序的索引,你可以使用 NumPy 库的 argsort 方法,并结合 - 符号来实现降序排序。argsort 方法返回的是数组元素从小到大的索引值,因此我们可以通过加上负号 - 来使其变成从大到小的顺序。 下面是具体的步骤和…...
RHEL9网络设定及网络脚本
1. 添加一张网卡 2. 重写一个网卡配置文件 [rootlocalhost ~]# cd /etc/NetworkManager/system-connections/ [rootlocalhost system-connections]# ls ens160.nmconnection [rootlocalhost system-connections]# vim ens224.connection [rootlocalhost system-connections…...
人工智能计算机视觉先锋——OpenCv 的颜色检测
红色 在计算机的世界里,只有 0 或者1,如何让计算机认识颜色是计算机视觉工作者首先需要考虑的事情,我们知道整个世界的颜色虽然五彩缤纷,但是都是3种原色彩合成的(R G B),有了(R G …...
pytorch学习(十):损失函数与反向传播
损失函数(Loss Function) 损失函数是衡量模型预测值与真实值之间差异的一个函数。在训练神经网络时,我们的目标是找到一组参数(如权重和偏置),使得模型的预测尽可能接近真实值,即最小化损失函数…...
day58|拓扑排序精讲,dijkstra(朴素版)精讲
拓扑排序精讲 117. 软件构建 (kamacoder.com) #include <iostream> #include <vector> #include <algorithm> #include <queue> #include <unordered_map>using namespace std;int main(){int n, m, s, t;cin >> n >> m;vector<…...
基于SSH的医院在线挂号系统设计与实现
点击下载源码 基于SSH的医院在线挂号系统设计与实现 摘 要 互联网技术迅速的发展给我们的生活带来很大的方便,同时也让许多行业迅速的发展起来。互联网技术已走向科技发展的巅峰期,我们要做的就是合理的使用互联网技术让我们的各个行业得到更快速的发展…...
TOPIK韩语等级考试|韩语语法:被动词和使动词
韩语语法: 被动词与主动词 글쓰기 관련 강좌나 책에서 우리 문장을 쓸 때 웬만하면 피동형을 쓰지 말라는 주장을 흔히 접하게 된다. 능동형 동사를 사용하면 글이 늘어지지 않아 간결해지고 힘찬 문장이 되는 게 사실이다. 그러나 이 주장이 우리글에서 피동형 동…...
基于大模型的Agent
2023年,对于所有的人工智能领域只有一个共同的主题——大模型。大模型的受关注程度与发展速度可谓前所未有。其中,基于大模型的Agent又是最近几个月大模型领域的热点。这不开始研究没有几个月,综述文章都出来了,你说快不快&#x…...
解决k8s flannel网络插件国内镜像docker拉取不到问题
一、准备下载资源 https://download.csdn.net/download/weixin_43205308/89608560 以下,每个k8s节点都要执行 二、载入镜像 解压上面的下载资源的文件夹后,会有图中的两个资源 载入资源 docker load --input flannel-flannel-v0.25.1-amd64.tar.gzd…...
HTML-03.新浪新闻-标题-样式2
1.<span>标签 <span>是一个在开发网页时大量使用的没有语义的布局标签 特点:一行可以显示多个(行内组合元素),宽度和高度默认由内容撑开 2.CSS选择器 2.1 元素选择器:标签名{...} 元素名称{ color:red; }…...
玩转大模型之五(测试FastGPT高级编排)
一、高级编排 FastGPT 从 V4 版本开始采用新的交互方式来构建 AI 应用。使用了 Flow 节点编排(工作流)的方式来实现复杂工作流,提高可玩性和扩展性。但同时也提高了上手的门槛,有一定开发背景的用户使用起来会比较容易。 编排方…...
YOLO:输入mp4视频数据,经过YOLO目标检测算法,输出带有目标框的新视频
作者:CSDN _养乐多_ 本文将介绍输入mp4视频数据,经过YOLO目标检测算法,输出带有目标框的新视频的代码脚本。 文章目录 一、代码 一、代码 代码只需要安装好cv2、ultralytics,然后修改模型路径、输入mp4视频文件路径、保存文件的…...
渲染技术如何应对数据增长与计算挑战
随着科技的飞速发展,数字内容的制作与呈现变得日益复杂和精细,这对渲染技术提出了前所未有的挑战。特别是在数据爆炸式增长和计算需求急剧提升的背景下,如何优化渲染技术,以应对这些挑战,成为了一个亟待解决的问题。 …...
uniapp用自带的canvas做画板签字
如下图移动端经常需要做此功能,用户签字。用户填表啥的。 先用touch进行监听手指的触摸事件 获取所点击的坐标位置。 这里有很多要注意的地方。 初始化 uniapp里的canvas与原生的canvas有区别,渲染之后会多很多莫名其妙的div节点,并且还有个div直接就把原生的canvas覆盖…...
Vue 3+Vite+Eectron从入门到实战系列之(二)一Elementplus及VueRouter的配置
为了后续开发方便,在没有 UI 设计师配合的情况下,让我们的界面更加美观,我们使用 elementplus 组件库,并配置路由。 删除不需要的默认文件夹及文件,src 配置如下 实现效果 安装 elementplus,vue-router npm install element-plus --save npm install vue-router --save在…...
JVM笔记一
JVM的功能 解释和运行 对字节码文件中的指令,实时的解释成机器码,让计算机执行。 内存管理 自动为对象、方法等分配内存自动的垃圾回收机制,回收不再使用的对象 即时编译 对热点代码进行优化,提高执行效率。将热点代码解释并…...
Flink 实时数仓(二)【DIM 层搭建】
1、DIM 层搭建 1.1、设计要点 DIM层设计要点: DIM层存的是维度表(环境信息,比如人、场、货等)DIM层的数据存储在 HBase 表中DIM层表名的命名规范为dim_表名 DIM 层表是用于维度关联的,要通过主键(维度外…...
如何提高编程能力?(来自准大三学长的含泪建议)
种一棵树最好是十年前,其次是现在 想了解更多内容可以看我主页:GGBondlctrl-CSDN博客 1.前言 以下是小编的亲身经历哟 (1)大一,摆烂 -------和每个人一样,大学都是带着美好的憧憬,我开始学习…...
PostgreSQL 高阶函数详解:全面深入的功能与实用示例
PostgreSQL 高阶函数详解 PostgreSQL 是一款功能强大的开源关系数据库管理系统,以其丰富的功能和高扩展性著称。在数据处理和分析方面,PostgreSQL 提供了一系列高阶函数,可以极大地简化和优化各种复杂操作。本文将详细介绍 PostgreSQL 的高阶…...
8–9月,Sui Move智能合约工作坊将在台北+线上举行
你对区块链和去中心化应用感兴趣吗?想深入学习Sui Move编程语言吗? 从8月10日到9月28日,Sui Mover社区将在每周六下午13:00–17:00举办精彩的工作坊,为期两个月,带你从零基础入门到高级进阶,全面掌握Sui M…...
【科研小小白】解释mmdetection 项目中configs文件夹中相关模型配置文件,以yolox为例子:
AI解释configs/_base_中相关模型配置文件: 标题这段代码是一个配置文件,用于设置YOLOX模型的训练和测试参数。下面是代码的详细解释: _base_:这是一个列表,包含了一些基础配置文件的路径。这些基础配置文件包含了模型…...
代码回滚命令
定位到当前分支 git branch回滚到指定的commit git reset --hard 85da0cb8322accad143cpush到远程分支 git push --force...
Fluent Mybatis
官方文档:https://gitee.com/fluent-mybatis/fluent-mybatis/wikis 新的ORM框架,整个设计理念非常符合工程师思维。 Fluent Mybatis 介绍 何为 Fluent Mybatis? Fluent Mybatis, 是一款 Mybatis 语法增强框架, 综合了 Mybatis Plus, Dynam…...
把电商和AI直播结合起来,你需要用到这些代码!
随着人工智能(AI)技术的迅猛发展,电商直播行业正经历着前所未有的变革,AI与电商直播的结合不仅提升了用户体验,还显著提高了商家的运营效率和销售转化率。 本文将为大家科普在电商AI直播中可能会用到的五段关键源代码,这些代码涵…...
Java I/O (Input/Output)——文件字节流
博客主页:誓则盟约系列专栏:Java SE 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Java I/O 简介 Java I/O(输入/输出)是 Java 程序中…...
【C++】函数/运算符重载
一、函数重载 1、什么是函数重载? 函数名相同,行参列表(类型,个数,顺序)不同的函数,这些函数构成函数重载。 (*注:C语言没有函数重载,C有) vo…...
CTFHub——XSS——反射型
1、反射型: 发现为表单式,猜测哪个可能存在注入漏洞,分别做测试注入发现name框存在xss漏洞 输入发现有回显但不是对方cookie,参考wp发现要用xss线上平台 将xss平台测试语句注入,将得到的url编码地址填入url框…...
AQS(二):共享锁的获取和释放
一、什么是共享锁? 同一时间点允许多个线程同时持有的锁,(请参考前边锁的分类) 二、AQS原理之共享锁的获取和释放流程 1、共享锁的获取过程 1.1、acquireShared(int arg) 方法 该方法用于获取共享锁(读锁)…...
Unity dots IJobParallelFor并行的数据写入问题
Unity dots IJobParallelFor并行的数据写入问题 [BurstCompile] public struct IncrementJob : IJobParallelFor { [ReadOnly] public NativeArray<int> baseValues; public NativeArray<int> resultValues; public void Execute(int index) {resultValu…...
雷军以及他所带领下的小米,开始彻底走向了马斯克以及特斯拉
如果对「手机时代」的小米进行总结的话,乔布斯以及他所带领下的苹果,无疑是雷军学习的对象。 无论是小米全生态的搭建,抑或是小米手机的发展历程,我们都可以非常清晰地看出,小米身上透露着苹果的影子。 当「手机时代…...
大数据系列之:CentOS7安装Python3详细步骤
大数据系列之:CentOS7安装Python3详细步骤 一、下载安装的Python版本二、解压缩三、设置安装路径四、安装编译需要的包五、编译六、编译安装七、设置软连接八、设置环境变量九、激活环境变量十、执行python命令十一、安装包 一、下载安装的Python版本 https://www.…...