首页 > 其他分享 >正则表达式中的惰性匹配是什么意思?

正则表达式中的惰性匹配是什么意思?

时间:2023-02-20 17:57:59浏览次数:36  
标签:字符 .+ 匹配 正则表达式 re 惰性 换行符 match

刚学正则表达式的时候,惰性匹配还挺难理解的。所以我看了挺多博客,终于弄懂了,现在用表格整理一下:

符号 作用
. 匹配任意除换行符 \n 外的字符
* 匹配前面的字符 0 次或多次
+ 匹配前面的字符 1 次或多次
? 匹配前面的字符零次或一次,或作为非贪婪限定符
.* 匹配除换行符 \n 外的任意字符 0 次或多次
.+ 匹配除换行符 \n 外的任意字符 1 次或多次
.*? 匹配除换行符 \n 外的任意字符 0 次或多次,但匹配结果尽可能短
.+? 匹配除换行符 \n 外的任意字符 0 次或多次,但匹配结果尽可能短

上面表格中最后两行的 ? 的作用就是指明一个非贪婪限定符,什么叫尽可能少重复?简单点说就是匹配最短的符合要求的表达式,如果不加 ?,默认匹配满足要求的最长的字符串,下面举出例子:

示例一(.*?)

re.match(r'a.*b', 'aababa') # 1
re.match(r'a.*?b', 'aababa') # 2
  • 1 式没有非贪婪限定符,匹配满足要求的最长表达式,结果为 aabab
  • 2 式有非贪婪限定符,结果尽可能短,因此结果为 aab。但是!到这里字符串还没有匹配完,还会继续匹配直到最后一个字符,因此最终的结果是两个,aab 和 ab

示例二(.+?)

re.match(r'a.+?b', 'aababa') # 3

同理 .+? 也一样,只不过和 .*? 比起来,这里最后的结果不包括匹配 0 次的情况而已,所以 3 式结果为 aab,ab 由于中间匹配 0 次,不会被匹配。

较难一点的示例

re.match(r'hello.*?world', 'xxxhelloworldxxhelloxxworld' # 4

通过上面的解析,结果显而易见:helloworld 和 helloxxworld。至于为什么没有 helloworldxxhelloxxworld,相信你也清楚了。

标签:字符,.+,匹配,正则表达式,re,惰性,换行符,match
From: https://www.cnblogs.com/touryung/p/17138359.html

相关文章

  • Golang基础-正则表达式
    backticksWhenusingbackticks(`)tomakestrings(Rawstringliterals),backslashes(\)don'thaveanyspecialmeaninganddon'tmarkthebeginningofspecial......
  • 2 Elasticsearch全文检索和匹配查询
    Elasticsearch主要功能就是完成模糊检索、字符串匹配,所以使用起来非常方便。而且它有一套自己的匹配规则,来决定把哪项搜索结果展示在前面。全文检索测试还接着上一篇的dem......
  • java正则表达式校验密码必须是包含大小写字母、数字、特殊符号的8位以上组合 或其中至
    一、语法字符 说明\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,n匹配字符n。\n匹配换行符。序列\\\\匹配\\,\\(匹配(。^ 匹配输入字符串开始......
  • 【LeeCode】28. 找出字符串中第一个匹配项的下标
    【题目描述】给你两个字符串 ​​haystack​​ 和 ​​needle​​ ,请你在 ​​haystack​​ 字符串中找出 ​​needle​​ 字符串的第一个匹配项的下标(下标从0开......
  • 正则表达式
    \将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,n匹配字符n。\n匹配一个换行符。序列\\匹配\而\(则匹配(。^匹配输入字......
  • python正则表达式
    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。python中提供了re模块用于正则表达式的匹配1、re.findall:在字符串中找到正则表达式所......
  • shell正则表达式和awk
    一、正则表达式注意事项:使用正则表达式必须加引号。正则表达式主要用来匹配字符串(命令结果,文本内容) 通配符匹配文件(而且是已存在的文件)基本正则表达式扩展正则......
  • Nginx匹配@符号的作用
    Nginx匹配@符号的作用@符号,用于定义一个Location块,且该块不能被外部Client所访问,只能被Nginx内部配置指令所访问,比如try_files或error_page.error_page400=@......
  • 【Kotlin】函数式编程 ③ ( 早集合与惰性集合 | 惰性集合-序列 | generateSequence 序
    文章目录​​一、及早集合与惰性集合​​​​二、惰性集合-序列​​​​三、generateSequence序列创建函数​​​​1、函数简介​​​​2、函数原型​​​​3、函数简介​......
  • 正则表达式
    正则表达式:匹配字符串能做什么:1.检测输入的字符串是否合法用户输入一个内容时,我们要提前做检测能够提高程序的效率且减轻服务器压力2.从一个大文......