正则表达式-使用笔记
- 正则使用不当,会导致CPU飙升;
- 场景区分,是判断存在还是提取内容;
- 匹配范围,是匹配部分内容还是整行;
一、初识正则
正则表达式 – 语法 | 菜鸟教程
sparksql 正则匹配总结
https://www.cnblogs.com/he1m4n6a/p/10256163.html
二、匹配模式 - 贪婪、懒惰、独享
JAVA进阶篇(13)— 正则表达式的性能优化(正则表达式导致CPU飙升)
正则表达式的三种模式:贪婪模式、懒惰模式、独占模式
贪婪模式
默认模式,尝试匹配尽可能多的字符。
常用量词:`*`, `+`, `?`, `{n,}` 等。
场景举例:当你想要匹配一个字符串中尽可能长的特定模式时。
例子:`<.*>` 用于匹配从一个 `<` 到下一个 `>` 之间的所有内容。
懒惰模式
最小匹配,尝试匹配尽可能少的字符。
常用量词:`*?`, `+?`, `??`, `{n,}?` 等。
场景举例:当你想要匹配最短的可能字符串时
例子:`<.*?>` 用于匹配 `<` 和最近的一个 `>` 之间的内容。
独享模式
类似于贪婪模式,但是一旦匹配,就不会回溯。
常用量词:`*+`, `++`, `?+`, `{n,}+` 等。
场景举例:当你确定不需要回溯时,或者当你想要避免正则表达式中的回溯导致的性能问题时,使用独享模式会更高效。
例子:`<.*+>` 用于匹配 `<` 之后的所有内容,直到字符串结束,而不尝试匹配闭合的 `>`。
三、回溯原理
导致性能下降最主要原因:
- .* 会导致大量回溯
- | 分支操作
https://zhuanlan.zhihu.com/p/27417442
四、优化正则
优化方向 - 是用于判断存在,还是用于提取内容
- 正则表达式:规则越多,要匹配的越多,性能越差;
- 被测串长度:越长,搜索约耗时,性能越差;
- 被测数据量:越多,性能差异约明显;
- 预处理:减少匹配规则
- 替代正则:用非正则函数实现
1. 使用正确的量词
不随意使用+或*,它会匹配尽可能多的字符,这可能导致回溯,特别是当模式不匹配时;
改用非贪婪量词(如 `*?` 和 `+?`);尤其避免:.*、.+
用于判断时, .*不要放在规则最后;
2. 使用更为精确的字符类
不随意使用.*来匹配字段,这个表达式包含了很大的搜索空间,容易发生不必要的匹配和回溯,导致匹配性能下降;
2. 消除不必要的字符组
例如:[@]简化为@ 、[0-9]可以简化为\d
3. 锚定匹配位置
使用锚点(如 `^` 和 `$`)来指定匹配的开始和结束位置,可以减少搜索空间,提高匹配效率;
使用.*开头的表达式应该在最前面加^,例如:.*abc vs ^.*abc
“^(?:abc|123)”比“^123|^abc”效率高,而“^(abc)”比“(^abc)”效率更高
^(?:aa|bb|cc) 效率高于 ^(aa|bb|cc).*
4. 优化多选结构
尽量避免多选结构,a|b|c 优化为 [abc]
提取开头的必需元素, (?:this|that) 优化为 th(?:is|at)
5. 优化捕获组
如果只是为了匹配文本而不关心匹配的具体内容,尽量不要使用捕获组;
当要捕获组的时候,使用非捕获型括号(?:),因为使用(?:)可以匹配想要的内容,但不捕获到组里,可以节省资源提高效率;
6. 避免使用嵌套的量词
如 `(a+)+`
7. 使用非正则函数
如果你的操作可以用字符串处理方法完成(比如`startsWith`、`endsWith`、`contains`),那么不使用正则表达式通常会更快。
8. 逆向思维
正向判断的正则不好实现,是否可以考虑反向的;
五、常用工具
regex101: build, test, and debug regex
正则表达式在线测试 | 菜鸟工具
六、性能比对
1. 实际运行任务测试
- 使用和不使用正则比对
- 多个不同的正则比对
2. 使用正则工具
相关文章:
正则表达式-使用笔记
正则使用不当,会导致CPU飙升;场景区分,是判断存在还是提取内容;匹配范围,是匹配部分内容还是整行; 一、初识正则 正则表达式 – 语法 | 菜鸟教程 sparksql 正则匹配总结 https://www.cnblogs.com/he1m4n…...
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
目录 C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】一维数组一维数组的创建数组的七种初始化完全初始化:部分初始化:字符数组的初始化:自动初始化为0:使用memset函数初始化…...
软件架构之计算机网络
软件架构之计算机网络 第 4 章 计算机网络4.1 网络架构与协议4.1.1 网络互联模型4.1.2 常见的网络协议4.1.3 IPv6 4.2 局域网与广域网4.2.2 无线局域网4.2.3 广域网技术4.2.4 网络接入技术 4.3 网络互连与常用设备4.4 网络工程4.4.1 网络规划4.4.2 网络设计4.4.3 网络实施 4.5 …...
Qt/C++项目积累: 2.主机监控器 - 2.2 历史功能实现
修订历史: 20240711:初始表设计,采用sqlite 正文: 关于历史数据存储,考虑的是用数据库来完成,目前考虑使用Sqlite和mysql,先用sqlite来实现,设计表过程如下: 机器总览…...
初识Spring Web MVC
1. 什么是 Spring Web MVC? Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"SpringMVC".Servlet&am…...
【排序算法】归并排序
目录 一.基本思想 二.递归版本 三.非递归版本 四.特性总结 1.时间复杂度:O(N*logN) 2.空间复杂度:O(N) 3.稳定性:稳定 一.基本思想 归并排序是采用分治法的一个非常典型的应用。它将已经有序的序列合并为完全有序的序列,即…...
游戏AI的创造思路-技术基础-决策树(2)
上一篇写了决策树的基础概念和一些简单例子,本篇将着重在实际案例上进行说明 目录 8. 决策树应用的实际例子 8.1. 方法和过程 8.1.1. 定义行为 8.1.2. 确定属性 8.1.3. 构建决策树 8.1.4. 实施行为 8.1.5. 实时更新 8.2. Python代码 8. 决策树应用的实际例子…...
vue缓存页面,当tab切换时保留原有的查询条件
需求: 切换tab时,查询条件不变 路由页面: 单个页面上加这句话:...
PythonConda系列(亲测有效):【解决方案】Collecting package metadata (current_repodata.json): failed
【解决方案】Collecting package metadata (current_repodata.json): failed 问题描述解决方案小结参考文献 问题描述 在cmd下运行:conda install pylint -y,报错如下: C:\Users\apr> conda install --name apr pylint -y Co…...
web前端开发——标签一(注释、标题、段落、换行、格式、图片)
今天我来针对web前端开发讲解标签一 目录 html标签_标题&段落&换行 注释标签:Ctrl/ 标题标签: h1-h6 段落标签: 换行标签: 格式标签 图片标签_src属性 html标签_标题&段落&换行 注释标签:Ctrl/ Ctrl/ &…...
Django 常见的操作符
在filter() 方法,exclude() 方法中使用大于,小于,模糊匹配等操作符。 常见的操作符如下: 操作符含义示例等于Book.objects.filter(price10)! 或 __ne不等于用于查找字段不等于特定值的记录。但更常用exclude()方法。__gt大于用于…...
AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
ajax 的全称 Asynchronous JavaScript and XML (异步 JavaScript 和 XML)。 AJAX是一种创建交互式网页应用的网页开发技术。其中最核心的依赖是浏览器提供的 XMLHttpRequest 对象,是这个对象使得浏览器可以发出 HTTP 请求与接收 HTTP 响应。实现了在页 面不刷新的…...
docker基础知识以及windows上的docker desktop 安装
记录以供备忘 基础概念: 什么是docker 将程序和环境一起打包,以在不同操作系统上运行的工具软件 什么是基础镜像 选一个基础操作系统和语言后,将对应的文件系统、依赖库、配置等打包为一个类似压缩包的文件,就是基础镜像 什么是…...
【深度学习基础】环境搭建 linux系统下安装pytorch
目录 一、anaconda 安装二、创建pytorch1. 创建pytorch环境:2. 激活环境3. 下载安装pytorch包4. 检查是否安装成功 一、anaconda 安装 具体的安装说明可以参考我的另外一篇文章【环境搭建】Linux报错bash: conda: command not found… 二、创建pytorch 1. 创建py…...
【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则
大家好,我是全栈小5,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言1、无法链接…...
idea启动vue项目一直卡死在51%,问题分析及其如何解决
如果你的项目也一直卡在百分之几十,你可以参考下面的方法,试一试能否解决 问题描述: 通过在idea终端中输入命令 npm run serve 启动vue项目,启动进程一直卡在51% 如何解决: 检查 < template > 标签中的html内容…...
基于STM32设计的智能喂养系统(ESP8266+微信小程序)175
基于STM32设计的牛羊喂养系统(微信小程序)(175) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成【3】ESP8266工作模式配置【4】上位机开发【5】项目模块划分1.2 项目功能需求1.3 项目开发背景1.4 开发工具的选择1.5 系统框架图1.6 系统原理图1.7 硬件实…...
第三方支付平台如何完美契合游戏行业?
在数字经济的浪潮中,游戏行业以其独特的魅力和创新能力,成为全球文化和经济交流的重要桥梁。然而,海外游戏商在进军中国市场时,常面临一系列难题。本文将通过一个故事案例,揭示第三方支付平台PASSTO PAY如何帮助海外游…...
计算机网络 5.6网桥与交换机
第六节 网桥与交换机 一、认识网桥 1.功能:连接两个具有相同或相似的网络结构的网络,解决网络之间距离太远问题,提高网络可靠性,还可以起过滤帧的作用而提高网络的性能。 2.适用场合:同构网。 3.特点: …...
CDH实操--集群卸载
作者:耀灵 1、停止正在运行的服务 a、控制台停止集群服务 b、控制台停止Cloudera Management Service c、命令行停止cm服务 systemctl stop cloudera-scm-agent #所有节点执行 systemctl stop cloudera-scm-server #cdh01节点执行2、主线并移除Parcles rm -r…...
My-TODOs:免费开源跨平台桌面待办清单应用终极指南
My-TODOs:免费开源跨平台桌面待办清单应用终极指南 【免费下载链接】My-TODOs A cross-platform desktop To-Do list. 跨平台桌面待办小工具 项目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 你是否经常忘记重要任务?是否在多个待办应用间…...
SAP 和 Legacy 系统之间的平面文件集成,GUI_DOWNLOAD 的实战设计
很多 SAP 项目里,系统集成并不总是从 API、RFC、OData 或 Event Mesh 开始。相当多的老系统仍然依赖一个最朴素的接口形态,固定格式的文本文件。财务共享平台要一份物料清单,仓储系统要一份当天新增物料,历史的生产执行系统只认 .txt 或 .csv,这时 ABAP 报表把 SAP 表里的…...
保姆级教程:在Vue3项目中用ZLMediaKit+WebRTC实现超低延迟监控直播(附完整代码)
Vue3WebRTC超低延迟监控直播实战指南 在实时视频监控领域,延迟是衡量系统性能的核心指标之一。传统RTSP流媒体方案在Web端实现时,往往面临秒级甚至更长的延迟,这在对实时性要求极高的安防监控、工业检测等场景中成为致命短板。本文将深入探讨…...
告别手动对照!用OrCAD Design Sync功能,5分钟自动化同步你的原理图与Allegro PCB变更
告别手动对照!用OrCAD Design Sync功能,5分钟自动化同步你的原理图与Allegro PCB变更 在高速迭代的电子设计领域,每一次原理图修改都可能引发PCB布局的连锁反应。传统手动同步方式不仅耗时费力,还容易遗漏关键变更。OrCAD Design…...
5月最新10款降AI神器实测:哪个能降知网维普AI率,从99.5%降至3.8%可信吗?
2025 年 12 月 25 日知网 AIGC 检测系统升级,2026 年 4 月 27 日维普 AI 率检测平台升级…2026 毕业季,各大主流 AIGC 检测软件陆续升级系统,识别 AI 痕迹更加精准。 临近毕业,同学们看者飘红的 AIGC 检测报告、纷繁复杂的降 AI 系…...
Python爬虫实战:从零编写一个健壮的静态页面抓取器!
㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐⭐⭐ (进阶) 🉐福利: 一次订阅后,专栏内的所有文…...
FreeMove:Windows系统C盘空间终极清理方案,无需重装释放数十GB
FreeMove:Windows系统C盘空间终极清理方案,无需重装释放数十GB 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 还在为C盘空间不足而烦恼吗&…...
还有人记得这种古老的语言吗?知道的没几个
前两天偶然看到一个熟悉又陌生的词汇, cobol,瞬间又勾起了我多年前的记忆,不知道还有多少人记得这种古老的语言,用过它的应该更是寥寥无几吧!今天来回忆杀。 COBOL(Common Business-Oriented Language&…...
3分钟让Windows任务栏变透明:TranslucentTB完全指南
3分钟让Windows任务栏变透明:TranslucentTB完全指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否厌倦了Windows系统…...
盐印相不是滤镜,是光学物理建模!:深度解析Midjourney --sref 与 --style raw 联动实现银盐晶体模拟原理
更多请点击: https://codechina.net 第一章:盐印相不是滤镜,是光学物理建模! 盐印相(Salt Print)作为一种19世纪诞生的早期摄影工艺,其成像本质并非数字图像处理中的风格化滤镜,而是…...
