正则表达式-使用笔记
- 正则使用不当,会导致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…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...
