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

2023-10-28 10:12

本文主要是介绍【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条件

这篇关于【MedusaSTears】正则表达式搜索心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292516

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

正则表达式r前缀使用指南及如何避免常见错误

《正则表达式r前缀使用指南及如何避免常见错误》正则表达式是处理字符串的强大工具,但它常常伴随着转义字符的复杂性,本文将简洁地讲解r的作用、基本原理,以及如何在实际代码中避免常见错误,感兴趣的朋友一... 目录1. 字符串的双重翻译困境2. 为什么需要 r?3. 常见错误和正确用法4. Unicode 转换的

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6