【MedusaSTears】正则表达式搜索心得

文章目录

  • 心得体会
  • 1.懒惰匹配最少字符 `.+?`
  • 2.前瞻: 字符串后边 包括/不包括 某个单词/字母
    • 2-1.包含某单词: start(?=.+?hello)
    • 2-2.不包含某单词: start(?!.+?hello)

心得体会

前情回顾:
【MedusaSTears】正则?不要太简单!—正则表达式个人学习心得总结:

  1. 正则说白了是对字符串的整理,所以对一个无间隙长串,第一步最主要的就是,【分割】字符串,类似于英语的自然拼读法那种,从业务需求方面,理解并分割字符串
    比如: 邮箱为什么要以@前后分界?谁告诉你的?因为你知道这是默认的,然而这恰恰是容易被忽略的重点
  2. 正确【分割】后,就不难找到关键字符或者关键位置,也就是可能需要replace的地方,这是启动的核心,下手的第一步
  3. 对于不确定的字符串长度,先找到可以确定的或者唯一的部分
  4. 贪婪匹配 vs 懒惰匹配:
    默认情况下,正则表达式使用最长匹配原则(也叫贪婪匹配原则)。
    懒惰匹配: 在量词*、+、?、{n}、{n,}、{n,m}后面加?就是懒惰模式,懒惰对应的就是匹配的尽可能少的情况。
  5. 注意 ? * + {1,32} 这些量词实际上包括本身
  6. 注意 . 不包括\n \r
  7. 注意 . 是任意单个字符, [] 是指定中括号内的字符
  8. ?:是忽略分组,也就是说括号内的内容不是一个group,包括在实际匹配,用处是 取值的时候忽略这个组合


需求: 查找指定字符串 之前/之后 的str, 且不包括条件里面的字符串
举例: 想要 <title>hello world</title> 标签里面的内容
答案: (?<=\<[tT][iI][tI][lL][eE]>).*?(?=</[tT][iI][tI][lL][eE]>)
解析: 如果跟位序有关,则务必用 前瞻(Lookahead) ?= 或者 后顾(Lookbehind) ?<=
后顾性能损耗比较大,js只支持前瞻(知乎上看到的,具体原因不详)
本题是 查找指定字符串<title>之后和</title>之前的内容

前瞻分两种:一种是正向前瞻 positive lookahead(?=xxx) 其后必须存在的内容,是一个条件,不是实际匹配中的内容
另一种是负向前瞻 negative lookahead(?!xxx)
?=</[tT][iI][tI][lL][eE]> 是前瞻, 也就是计算机从左到右读取第n位字符的时候,n右侧的都是?=

1.懒惰匹配最少字符 .+?

  1. 注意 . 不包括\n \r
  2. 注意 . 是任意单个字符, [] 是指定中括号内的字符


+是至少出现1次 .+的意思:至少1个字符
比如: hello.+friend返回的结果是: 字符串中 命中 hello开头,friend结尾的最长字符串,但是 hellofriend 中间,必须至少有一个字符,不存在 hellofriend这种情况

?则代表懒惰匹配,将.+匹配长度最小化
比如:字符串hellomyfriendweareallfriends,
如果用hello.+friend匹配就是不包括最后s的整个字符串hellomyfriendweareallfriend;
如果用hello.+?friend匹配,结果就是命中第一个friend就停止的 hellomyfriend

那么问题来了: .*?又表示什么意思呢?

2.前瞻: 字符串后边 包括/不包括 某个单词/字母

这里之所以 配合 .+? 进行查询条件,是因为括号中的条件,和前面的字符串并不是相邻的,中间隔着至少1个字符及以上

2-1.包含某单词: start(?=.+?hello)

查找start单词,并且后边要包括hello这个单词
实际应用:
定位日志中,Instagram的category是call的:
instagram(?=.+?category=call)

2-2.不包含某单词: start(?!.+?hello)

参考资料: 正则表达式:不包含某个单词

查找start单词,但是后边不包括hello这个单词
实际应用:
定位日志中,Instagram的category≠call的:
instagram(?!.+?category=call)

注意:输出结果只是括号前的东西,括号里的只是if条件

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

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

相关文章

关于pycharm中句号变成点的问题

现象 在pycharm的使用中&#xff0c;经常遇到一个问题&#xff1a;注释写着写着&#xff0c;突然句号“。”变成了“.” 原因 今天突然发现&#xff0c;造成该现象的原因是&#xff1a;某个瞬间按下了ctrl .&#xff0c;那么之后按下句号只能显示为点。 pycharm中&#xf…

STM32G030F6P6 芯片实验 (一)

STM32G030F6P6 芯片实验 (一) 淘宝搞了几片, 没试过 G系列, 试试感觉. 先搞片小系统版: 套 STM32F103C8T6小系统板格式. 原理图: (1) Ref 有点跳, 从 STM32F103C8T6 系统板改的, 没重编号. (2) Type-C 纯给电, 砍了 16pin的, 直接换 6pin的。 (3) 测试LED放 B2。 (4) 测试底…

Android 10.0 framework关于systemUI状态栏透明背景的功能实现

1.概述 在10.0的系统产品定制化开发中,在对于系统原生SystemUI的状态栏背景在沉浸式状态栏的 情况下默认是会随着背景颜色的变化而改变的,在一些特定背景下状态栏的背景也是会改变的,所以由于产品开发需要 要求需要设置状态栏背景为透明的,所以就需要在Activity创建的时候…

MongoDB安装大全

MongoDB官网&#xff1a;https://www.mongodb.com/zh windows下安装mongodb 下载msi安装程序 一步一步安装即可 MacOS下安装mongodb 安装流程&#xff1a;https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ 首先安装homebrew 注意事项&#xff1a; 在安…

仿真翻页企业内刊制作方法

现如今很多企业都会把自身的企业文化做成电子内刊形式&#xff0c;不再停留于传统纸质的形式&#xff0c;而这种电子版的书更容易被翻阅和传播。特别是员工可以随时随地来阅读企业的文化价值和发展趋向&#xff0c;进而创造出更多的经济效益。不得不说&#xff0c;一本企业文化…

封装线程池ThreadPoolExecutor

封装代码 class MyThread(object):def __init__(self):# 线程池 根据自己需要传入最大线程数量,我只需要一个所以传1self.executor ThreadPoolExecutor(2)# 用于存储期程self.future_dict {}# 检查worker线程是否正在运行def is_running(self, tag):future self.future_dic…

Mysql数据库 4.SQL语言 DQL数据查询语言 查询

DQL数据查询语言 从数据表中提取满足特定条件的记录 1.单表查询 2.多表查询 查询基础语法 select 关键字后指定要查询到的记录的哪些列 语法&#xff1a;select 列名&#xff08;字段名&#xff09;/某几列/全部列 from 表名 [具体条件]&#xff1b; select colnumName…

uniapp项目APP端安卓ios权限检测教程

导语:在 APP 的日常开发过程中,权限检测与授权是不可避免的一项重要的功能,下面就简单介绍一下如何检测和授权的方法。 目录 原理方法实战原理 此授权方法主要是依托于 HTML5 产业联盟的HTML5+规范实现的。 HTML5 产业联盟官网 获取当前操作系统名称 可以使用uni.getSys…

大数据前置学习基础准备(非常详细!)

1.需要的环境 需要3台服务器&#xff0c;centos7 为集群&#xff0c;全部设置为nat模式 2.整个环境大体 1.设置三台Linux虚拟机的主机和固定ip 2.在Linux系统以及本机系统中配置了主机名映射 3.配置了三台服务器之间root用户的ssh免密互通 4.安装配置JDK环境 5.关闭防火墙和SEL…

Python基础入门例程24-NP24 淘汰排名最后的学生(列表)

最近的博文&#xff1a; Python基础入门例程23-NP23 删除好友&#xff08;列表&#xff09;-CSDN博客 Python基础入门例程22-NP22 删除简历&#xff08;列表&#xff09;-CSDN博客 Python基础入门例程21-NP21 增加派对名单&#xff08;二&#xff09;&#xff08;列表&#xff…

【Linux】进程概念(下)

进程概念 一、环境变量1. 命令行参数2. 常见的环境变量&#xff08;1&#xff09;PATH&#xff08;2&#xff09;PWD&#xff08;3&#xff09;HOME&#xff08;4&#xff09;env 查看所有的环境变量 3. 获取环境变量&#xff08;1&#xff09;通过代码获取环境变量&#xff08…

博客摘录「 TCP/IP网络编程——习题答案」2023年10月29日

clnt_sdaccept(serv_sd, (struct sockaddr*)&clnt_adr, &clnt_adr_sz);read(clnt_sd, file_name, BUF_SIZE); fpfopen(file_name, "rb"); //尝试打开客户端请求的文件if(fp!NULL) //如果文件存在&#xff0c;则传送给客户端{while(…

应用开发平台集成工作流系列之17——流程建模功能前端设计与改造回顾

背景 对于流程设置不友好的问题&#xff0c;国内钉钉另行设计与实现了一套流程建模模式&#xff0c;跟bpmn规范无关&#xff0c;有人仿照实现了下&#xff0c;并做了开源&#xff08;https://github.com/StavinLi/Workflow-Vue3&#xff09;&#xff0c;效果图如下&#xff1a…

HiQPdf Library for .NET - HTML to PDF Crack

HiQPdf Library for .NET - HTML 到 PDF 转换器 .NET Core&#xff0c;用于 .NET 的 HiQPdf HTML 到 PDF 转换器 &#xff1a;HiQPdf HTML to PDF Library for .NET C# 和 HTML to PDF .NET Core 为您提供了一个现代、快速、灵活且强大的工具&#xff0c;只需几行代码即可创建复…

CRM客户管理系统源码 带移动端APP+H5+小程序

CRM客户管理系统源码 带移动端APPH5小程序 开发环境: thinkphp mysql 功能介绍&#xff1a; 1、 办公管理&#xff1a;审批管理、工作报告、日程管理、办公审批、公告管理 2、 客户管理&#xff1a;我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、客…

ES性能优化最佳实践- 检索性能提升30倍!

Elasticsearch是被广泛使用的搜索引擎技术&#xff0c;它的应用领域远不止搜索引擎&#xff0c;还包括日志分析、实时数据监控、内容推荐、电子商务平台、企业级搜索解决方案以及许多其他领域。其强大的全文搜索、实时索引、分布式性能和丰富的插件生态系统使其成为了许多不同行…

echarts修改图例legend样式:正方形、矩形、圆形、圆角

ECharts 提供的标记类型有 ‘circle’, ‘rect’, ‘roundRect’, ‘triangle’, ‘diamond’, ‘pin’, ‘arrow’, ‘none’ legend: {icon: circle }参考文章 echarts 图例修改legend中icon的形状及大小

SpringBoot中HttpClient的使用

文章目录 1. HttpClient 介绍2. 导入坐标3. 使用 HttpClient 发送 Get 请求4. 使用 HttpClient 发送 Post 请求 1. HttpClient 介绍 HttpClient 是 Apache Jakarta Common下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff…

JavaScript组合模式

JavaScript组合模式 1 什么是组合模式2 宏命令3 示例&#xff1a;扫描文件夹4 引用父对象 1 什么是组合模式 组合模式是一种结构型设计模式&#xff0c;用于将对象组合成树形结构&#xff0c;并使客户端能够统一处理单个对象和组合对象。它通过使用继承和组合两个概念&#xf…

【MySQL】C语言连接数据库

文章目录 一、安装 MySQL 库二、MySQL C API 相关接口1、C API 官方文档2、初始化 MYSQL3、连接 MySQL4、下发 mysql 指令5、获取 mysql 查询结果6、释放 MYSQL_RES 对象7、关闭 MySQL 连接8、MySQL 其他操作9、总结 三、使用图形化工具连接 MySQL 一、安装 MySQL 库 我们之前…