首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么懒惰匹配在这个正则表达式中不起作用?

懒惰匹配在正则表达式中不起作用的原因是因为该正则表达式中没有使用懒惰匹配的语法。

懒惰匹配是指在正则表达式中使用"?"来表示尽可能少地匹配字符。而在这个正则表达式中,如果没有使用懒惰匹配语法,那么默认的匹配方式是贪婪匹配,即尽可能多地匹配字符。

举个例子,假设正则表达式为:/a.b/,要匹配的字符串为:"ababab"。在这个正则表达式中,.表示匹配任意字符任意次数,而默认的贪婪匹配方式会尽可能多地匹配字符,所以会匹配整个字符串"ababab"。

如果要使用懒惰匹配,可以在.后面加上"?",即:/a.?b/。这样就会尽可能少地匹配字符,所以会匹配到第一个"ab"。

总结起来,懒惰匹配在正则表达式中不起作用是因为没有使用懒惰匹配的语法,而是使用了默认的贪婪匹配方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 strace Docker 不起作用

在编辑“容器如何工作”爱好者杂志的能力页面时,我想试着解释一下为什么 strace Docker 容器无法工作。...为什么 strace 不能工作,为什么--cap-add=SYS_PTRACE 可以解决这个问题? 假设 1:容器进程缺少 CAP_SYS_PTRACE 能力。...为什么?! 假设 2:关于用户命名空间的事情? 我的下一个(没有那么充分的依据的)假设是“嗯,也许这个过程是不同的用户命名空间里,而 strace 不能工作,因为某种原因而行不通?”...这个问题其实并不相关,但这是我观察时想到的。 容器进程是否不同的用户命名空间中?嗯,容器: root@e27f594da870:/# ls /proc/$$/ns/user -l ......这很容易解释为什么 strace Docker 容器不能工作 —— 如果 ptrace 系统调用完全被屏蔽了,那么你当然不能调用它,strace 就会失败。

6.4K30

正则表达式密码强度匹配的使用

一、背景   今天领导让我写几个正则表达式来对密码做强度验证,听到写正则表达式内心是这样的感觉(哈哈,三分钟搞定,今天又可以打鱼了)。...二、解决方法   以第三种为例,这个可以分解为如下需求: 存在数字 存在字母 存在半角符号 长度六位及以上 关键是如何同时满足前三个条件,我有限的知识里并不知道怎么搞,然后只好求助于万能的百度了,最终找了几个小时后发现如下几个关键词...=pattern) :正向预测先行搜索 名字看着高大上,不明所以,看完示例大概明白什么意思,这个表达式匹配这个表达式起始的字符串(我也不知道咋解释),就是假设这样一个表达式abc(?...=[abc])只会对作用于后面的123,这个显然是不匹配的后整个就不匹配了,然后关键来了名字里有预测两个字,这两个字表名了这个表达式的特性:不占用字符,匹配后如果匹配成功就继续匹配了好像从来不存在这个东西一样...[abc]),对于abc123是匹配成功的,对于abca匹配失败,如下所示: reg = /abc(?!

3.9K30
  • 数据科学系列:数据处理(6)--字符串函数基于R(二)

    WorkingNotes" 我们想匹配字符串的".",如果直接用完全匹配: str_view(text1, ".") ? 为什么匹配到的是"F"呢?因为"."...如果在使用正则表达式的过程,发现匹配到并不是你想要的结果,一检查匹配规则是否正确,二是看下你想要匹配的字符是否为一些特殊符号,需要进行转义,三是贪婪匹配还是懒惰匹配。...重复量词 这里涉及到贪婪和懒惰匹配。 贪婪匹配:通常正则表达式包含能接受重复的限定符时,通常是匹配尽量多的字符,称之为贪婪匹配。...,加深对贪婪和懒惰匹配的理解。 匹配text4,含有8-9位数字的字符串: str_view(text4, "\\d{8,9}") ?...4.2.6 R语言正则表达式总结 正则表达式部分比较晦涩,看书的时候在这个部分花了很长时间,理解这一块,最好是理论结合练习,多写一下案例,下面会接着介绍stringr包的使用正则表达式的字符串处理函数

    78620

    正则表达式的回溯

    另外,不管正则表达式怎么写,对于DFA而言,文本的匹配过程是一致的,都是对文本的字符依次从左到右进行匹配,所以,DFA匹配过程是跟正则表达式无关的,而 NFA 对于不同但效果相同的正则表达式匹配过程是完全不同的...匹配过程如下图所示(橙色为匹配,黄色为不匹配), ? 1~2步应该都好理解,但是为什么第3步开始,虽然已经文本已经有一个b匹配了b{1,3},后面还会拉着字母c跟b{1,3}做比较呢?...默认情况下,这个几个特殊字符都是贪婪的,也就是说,它会根据前导字符去匹配尽可能多的内容。这也就解释了为什么第3部分的例子,第3步以后的事情会发生了。 以上字符后加上一个问号(?)...则可以开启懒惰模式,该模式下,正则引擎尽可能少的重复匹配字符,匹配成功之后它会继续匹配剩余的字符串。在上例,如果将正则换为 ab{1,3}?...那么第4步时,正则的b和文本的c进行匹配,当无法匹配时,并不进行回溯,这时候整个文本就无法和正则表达式发生匹配。如果将正则表达式的加号(+)去掉,那么这个文本整体就是匹配的了。

    1K10

    网络爬虫——正则表达式语法

    字母大写相当于非(个人总结) \d 匹配十进制数字 \D 匹配除了十进制数字的字符串 \s 匹配空白字符 \S 匹配非空白字符 [asd213] 匹配括号的任意一个字符 [...^asd213] 匹配除了括号的任意一个字符 实例1 源字符串:"chengxuyuanxiaozhe666" 正则表达式:"xiaozhe" 匹配后:"xiaozhe" 实例2 源字符串:"chengxuyuanxiao...匹配后:"xuyuan" 3.贪婪模式与懒惰模式 贪婪模式:就是尽可能多的匹配,默认贪婪模式 懒惰模式:就是尽可能少的匹配,也叫精准模式 当出现以下组合时,才代表是懒惰模式: *?...e" 匹配后:"xiaozhe"//懒惰模式,尽可能少的匹配 4.模式修正符 不改变正则表达式的情况下,通过模式修正符使匹配结果发生改变。...这个看不懂没关系,下面的例子就懂了 re.compile(“正则表达式”).findall(“原字符串”) //原匹配语句 re.S //使.也可以匹配换行 re.I //匹配时候忽略大小写

    62530

    正则表达式懒惰贪婪和replace函数

    第一个表达式的问题在哪儿呢,这要从正则表达式懒惰与贪婪说起,下面是相关的解释: 当正则表达式包含能接受重复的限定符时,通常的行为是(使整个表达式能得到匹配的前提下)匹配尽可能多的字符。...以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。...有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?...就意味着匹配任意数量的重复,但是能使整个匹配成功的前提下使用最少的重复。...由此可以看出本例,使用了贪婪模式,所以匹配出来的结果是这样的: {111}{bbb}{111} 要改进程序,只需要把贪婪模式改成懒惰模式即可,上面说过只需要在后面加一个问号?

    84350

    讲给前端的正则表达式(4):避免灾难性回溯

    本文中,我们将会学习需要注意的情况,例如灾难性的回溯。为了帮助我们理解问题,还分析了贪婪和懒惰量词以及为什么 lookahead 可能会有所帮助。...贪婪量词 本系列文章的前几部分,我们使用了 + 之类的量词。它告诉引擎至少匹配一个。 const expression = /e+/; expression.test('Hello!')....+>/); // ["greedy" (...) ] 如你所见,贪婪的量词与最长的字符串匹配! 惰性量词 本系列,我们还将介绍 ? 量词。...符号不会发生这种情况 现在由于回溯, [[0-9]+] 匹配的字符数量减少了。它匹配 12345678。...最基本的形式,它声明 x 仅会在其后跟随 y 时才匹配。 const expression = /x(?

    58420

    python正则表达式懒惰匹配和贪婪匹配说明

    第一次碰到这个问题的时候,确实不知道该怎么办,后来请教了一个大神,加上自己的理解,才了解是什么意思,这个东西写python的会经常用到,而且会特别频繁,在此写一篇博客,希望可以帮到一些朋友。...d" print("懒惰匹配 = " + regexL) regL = re.compile(regexL) listL = re.findall(regL, str) print("懒惰匹配结果")...补充知识:python正则匹配贪婪匹配效率比较 用例回归完成之后,一般都要生成一个summary_report.但是,发现生成报告的时间耗时很久,搜集资料发现与匹配文件内容使用的正则表达式有很大关系....执行时间上二者差别巨大;另外执行时间与正则表达式的长度也有关系,较长的表达式建议分段匹配. 2.贪婪匹配时间 ? 3.非贪婪匹配时间 ?...以上这篇python正则表达式懒惰匹配和贪婪匹配说明就是小编分享给大家的全部内容了,希望能给大家一个参考。

    3K10

    这可能是迄今为止最好的一篇正则入门教程-下

    后向引用 使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以表达式或其它程序作进一步的处理。...:exp)不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像前两种那样被捕获到某个组里面,也不会拥有组号。“我为什么会想要这样做?”——好问题,你觉得为什么呢?...= # 断言要匹配的文本的后缀 # 查找尖括号括起来的内容:前面是一个"/",后面是先前捕获的标签 ) # 后缀结束 贪婪与懒惰正则表达式包含能接受重复的限定符时...就意味着匹配任意数量的重复,但是能使整个匹配成功的前提下使用最少的重复。 现在看看懒惰版的例子吧: a.*?b 匹配 最短的,以a开始,以b结束的字符串。...简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。

    70550

    正则表达式必知必会 - 重复匹配

    为了演示这种用法,在下面这个例子里使用了和刚才一样的正则表达式,但文本内容和上一个例子稍有不同。...注意 这个正则表达式的最后一部分是 \w+ 而不是 [\w.]+。如果把 [\w.] 用作这个模式的最后一部分,第二、第三和第四个匹配上就会出问题。         这里没有对字符集合 [\w.]...但本篇介绍的其他重复匹配形式重复次数方面都没有上限值,而这样做有时会导致过度匹配的现象。考虑下面这个例子,例子的文本取自某个 Web 页面,里面包含两个 HTML 的 标签。...任务是用正则表达式匹配 标签的文本。...不需要这种“贪婪行为”的时候,该使用这些量词的“懒惰型”(lazy)版本。之所以称之为“懒惰型”是因为其匹配尽可能少的字符,而非尽可能多地去匹配懒惰型量词的写法是贪婪型量词后面加上一个 ?。

    66730

    正则表达式引发的惨痛代价

    这就是 NFA 自动机的匹配过程,虽然实际应用,碰到的正则表达式都要比这复杂,但匹配方法是一样的。...懒惰模式(Reluctant) 该模式下,正则表达式会尽可能少地重复匹配字符。如果匹配成功,它会继续匹配剩余的字符串。 例如,在上面例子的字符后面加一个“?”,就可以开启懒惰模式。...讲到这里,你应该非常清楚了,避免回溯的方法就是:使用懒惰模式和独占模式。 还有开头那道“一个 split() 方法为什么会影响到 TPS”的存疑,你应该也清楚了吧?...split() 匹配分组时遇到特殊字符产生了大量回溯,我当时是正则表达式后加了一个需要匹配的字符和“+”,解决了这个问题。 \\?...减少捕获嵌套 这个方法之前,我先简单介绍下什么是捕获组和非捕获组。 捕获组是指把正则表达式,子表达式匹配的内容保存到以数字编号或显式命名的数组,方便后面引用。

    1.9K10

    Java性能调优--代码篇:优化正则表达式匹配效率

    我们的日常业务开发中经常会涉及到使用正则表达式对数据进行处理,比如String的Split()方法,它根据方法传入的正则表达式对字符串做分割处理。...了解了三种匹配方式的匹配逻辑之后,给出第一个优化建议 ? 优化建议 推荐使用正则表达式的时候,采用独占模式效率最佳,因为触发回溯的概率最小。 ?...String regular = "(aab|aba|abb)dfg"; 在这个例子,"aab"并未匹配,于是回溯到字符串的第一个元素重新匹配第二个分支"aba",以此类推,直到判断完所有分支...3 优化正则的捕获组 捕获组正则表达式通常用"()"表示,它将其中匹配到的内容保存到一个数组,以便之后使用。...4 总结 本篇针对正则表达式的三个点:匹配模式、选择分支、捕获组,分析出了三个优化建议: 1、推荐使用正则表达式的时候,采用懒惰模式和独占模式效率最佳,因为触发回溯的概率最小。

    5.3K11

    正则表达式很难吗?其实也就那样!

    今天我们来学习一下号称最难学的正则表达式正则表达式我们写爬虫的时候确实是一个很好的帮手,因为有一些网站的数据可能并不是那么的规整或者数据太多,我们只需要部分数据的时候,此时我们就可以通过一些表达式来进行提取.../ 正则表达式之“原子” / 估计大家看到这个小标题就有点懵逼,原子?我点错公众号了吗?当然你没有点错,这里的“原子”,并非是物理的原子,那是什么?...原子是正则表达式中最基本的组成单位,每一个正则表达式至少要包含一个“原子”。 常见的原子类型有哪些?...sre.SRE_Match object; span=(4, 7), match='and'> 说明:re.research返回的是一个match对象 2.非打印字符作为原子: 非打印字符,是一些字符串的格式控制符号.../ 正则表达式的函数 / 接下来我们来看一下正则的函数,这个是十分重要的。我就直接上代码。

    95420

    正则表达式-入门

    正则表达式的定义 正则表达式,又称规则表达式。(英语:Regular Expression,代码中常简写为regex、regexp或RE),计算机科学的一个概念。...正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 二 正则表达式的字符区间 []这个元符号可以定义一个字符集合,字符集合能够与该集合里的字符区间的字符相匹配。...匹配零个或者一个字符 举例:http与https {} 可以设定匹配字符的次数 {3} 匹配三次 {4,8} 匹配最少4次,最多8次 {3,} 匹配重复最少3次 七 正则表达式的贪婪型字符与懒惰型字符...* + 为贪婪性元字符,进行匹配时,行为模式是多多益善而不是适可而止的,会尽可能的从一段文本的开头一直匹配到文本的末尾,而不是从这段文本的开头匹配到碰到的第一个匹配是为止。...懒惰型字符相反。 贪婪型字符 懒惰型字符 * *? + +? {n,} {n,}?

    41030

    Java一分钟之-正则表达式Java的应用

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于字符串匹配、查找、替换和提取模式。...Java正则表达式通过java.util.regex包来支持。 常见问题 理解元字符:正则表达式的特殊字符(如.、*、+、?、^、$等)可能与预期不符,因为它们有特殊的含义。...边界匹配:正确使用开始和结束边界(^、$)以及单词边界(\b)有时很棘手。 贪婪与懒惰量词:默认情况下,*、+和?是贪婪的,会匹配尽可能多的字符;使用?使其变得懒惰匹配尽可能少的字符。...易错点 未转义特殊字符:Java字符串,需要双反斜杠(\)来转义正则表达式的特殊字符。 不完整的模式:正则表达式可能因为未正确闭合的括号或其他结构而无效。...test@example.com")); // true System.out.println(isValid("invalid_email")); // false } } 在这个例子

    21310

    一篇文章让你从此不再畏惧正则表达式

    正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。...正则表达式括号用来分组,这个时候我们可以通过用$1来获取 group#1的内容 ? 说下这个正则的意义,如果网站用了https,网站引用静态资源也必须是https,否则报错。...与贪婪对应就是懒惰模式,懒惰对应的就是匹配的尽可能少的情况。如何开启懒惰模式?量词后面加?。继续上面的例子 /\d{3,6}?...` 经过对比,只要是”^”这个字符是括号”[]”中被使用的话就是表示字符类的否定,如果不是的话就是表示限定开头。我这里说的是直接在”[]”中使用,不包括嵌套使用。...特殊案例 1.正则匹配括号 正则表达式,前括号 [ 属于特殊字符,要匹配它,需要转义,即加上 \;而后括号 ] 不属于特殊字符,不必加转义字符 举例说明: 需要匹配以下字符串括号里面的内容

    1K20

    C# 正则表达式

    懒惰限定符 ? 捕获分组 ? 得到上面秘籍后我们可以小试牛刀... 小试牛刀 C#中使用正则表达式主要是通过Regex类来实现。...使用正则表达式前我们先来看看“@”符号的使用。...从上面的例子我们不难看出贪婪与懒惰的区别,他们的名子取的都很形象。 贪婪匹配匹配尽可能多的字符。 懒惰匹配匹配尽可能少的字符。 (exp)分组 在做爬虫时我们经常获得A中一些有用信息。...正则表达式里使用()包含的文本自动会命名为一个组。上面的表达式中共使用了4个()可以认为是分为了4组。 输出结果共分为:4组。 0组:为我们所匹配的字符串。...Replace 替换字符串 用户输入信息时偶尔会包含一些敏感词,这时我们需要替换这个敏感词。 string PageInputStr = "靠.TMMD,今天真不爽....

    1.6K10

    正则表达式:案例分析

    世界上为什么会有正则表达式这么反人类的玩意儿?...正则为什么不太好学? 正如看到的那样,对正则表达式进行测试是很有技巧的。验证某个模式能不能获得预期的匹配结果并不困难,但如何验证它不会匹配到你不想要的东西可就没那么简单了。...正则表达式必知必会 这里的关键是正则表达式很少有对错之分(当然,前提是它们能解决问题),我们更关心的是它们的复杂程度,而这要由模式匹配操作的精确程度来决定;如果你需要更精确的匹配,就需要构造更复杂的正则表达式...[\d]))/g; return raw.replace(regex, ","); } 简析: “,”应该被加到这么一个位置:这个位置右侧的数字个数是3的整数倍(而且再往后不应该再有数字了),这个位置左侧应该还有数字...细节型题目 题目01: 题目02: 题目03: 陷阱: {} 重复次数匹配,不包含 {,n} 语法,合理语法有:{n}、{n,}、{m,n} 知识:懒惰匹配 参考: 《精通正则表达式(第三版)》 《

    1.3K20

    正则表达式用法简介与速查

    匹配任意次数的重复的字符时,会时时注意其后面的表达式 ,如果一旦发现后面的表达式符合匹配条件,自己本身就停止继续匹配了。所以本例, 只匹配到之前的部分。 4....但如果这个被包裹在 …,则把外层的和标签的内容也一起匹配出来。...由于正则表达式中使用了3个子表达式,故结果,把这3个子表达式的匹配结果分开放到了一个元组。...(2) String 对象关于正则表达式的函数 str.search(regexp) String 对象查找匹配入参正则表达式 regexp,匹配成功则返回字符串首次匹配项的索引; 否则返回...-1 str.match(regexp) String 对象查找匹配正则表达式 regexp,匹配成功则返回一个包含若干匹配信息的 Array(内容详见下例二), 未匹配则返回 null str.replace

    3.7K20
    领券