当前位置: 首页 > 知识库问答 >
问题:

为什么懒惰的量词后面跟着问号会变得贪婪?[重复]

微生俊健
2023-03-14

为什么是“hello”.match(/^(.*?)?/)[0] 计算结果为 “h” 而不是 “”

换句话说,为什么跟随一个带有零或一量词的惰性表达式(. *?) ?让它有点贪婪?

共有1个答案

靳茂
2023-03-14

并不是内部量词变得贪婪,而是它试图避免匹配完全空的部分。这就是为什么.*仍然只匹配第一个字符,而不是整个单词。

这是JavaScript正则表达式的一个奇怪之处。带有贪婪量词的空匹配部分的处理方式与其他常见的正则表达式引擎略有不同。真正的原因很复杂。请参阅:贪婪在JavaScript中的行为不同?

解决方法是使外部量词也变懒,并添加一个问号:

"hello".match(/^(.*?)??/)[0] // output: ""
 类似资料:
  • 量词,看上去十分简单,但实际上它可能会很棘手。 如果我们打算寻找比 /\d+/ 更加复杂的东西,就需要理解搜索工作是如何进行的。 以接下来的问题为例。 有一个文本,我们需要用书名号:«...» 来代替所有的引号 "..."。在许多国家,它们是排版的首选。 例如:"Hello, world" 将会变成 «Hello, world»。 一些国家偏爱 „Witam, świat!”(波兰语)甚至 「你好

  • 贪心量词指示搜索引擎搜索整个字符串并检查它是否与给定的正则表达式匹配。 以下是在java中使用正则表达式的Greedy Quantifiers的各种示例。 Sr.No 构造和匹配 1 X? X,曾经或根本没有。 2 X* X,零次或多次 3 X+ X,一次或多次。 4 X{n} X,正好是n次。 5 X{n,} X,至少n次。 6 X{n,m} X,至少n但不超过m次

  • 我有模型类别。它可能有父类别和子类别列表。我写这个问题是因为找不到实体和自己相关的情况。 我试图这样实现它: 我保存实体,如: 我希望看到这样的情况: 但是在子模型中,我有递归循环。如何防止它? 是的,我也使用了@JsonIgnore。但是我不确定这是不是一个好的做法。但是如果我有一个案例,当我需要一个类别时,我真的需要将它发送给父母的UI。@JsonIgnore可以产生这个吗?

  • 本文向大家介绍python正则表达式的懒惰匹配和贪婪匹配说明,包括了python正则表达式的懒惰匹配和贪婪匹配说明的使用技巧和注意事项,需要的朋友参考一下 第一次碰到这个问题的时候,确实不知道该怎么办,后来请教了一个大神,加上自己的理解,才了解是什么意思,这个东西写python的会经常用到,而且会特别频繁,在此写一篇博客,希望可以帮到一些朋友。 例:一个字符串 “abcdacsdnd” ①懒惰匹配

  • 贪婪 vs 不贪婪 当重复一个正则表达式时,如用 a*,操作结果是尽可能多地匹配模式。当你试着匹配一对对称的定界符,如 HTML 标志中的尖括号时这个事实经常困扰你。匹配单个 HTML 标志的模式不能正常工作,因为 .* 的本质是“贪婪”的 #!python >>> s = '<html><head><title>Title</title>' >>> len(s) 32 >>> print re.

  • 问题内容: ,它在它的第一个版本,也有类似的代码如下: 通过使用惰性过滤器集合,它可以过滤满足给定谓词的前5个元素(在这种情况下,可以被3整除),而不必求值数组中的 每个 元素。 但是,答案随后表明,每个元素可以多次调用’谓词(对于范围为1 … 15的元素,其谓词为3次,结果为0,则为两次)。 懒惰评估此过滤器效率低下的原因是什么?有什么方法可以避免多次评估同一元素? 问题答案: 问题所在 这里的

  • 问题内容: 在我们正在开发的此应用程序中,我们注意到一个视图特别慢。我剖析了该视图,并注意到,即使数据库中只有两个对象要获取,也执行了一个查询,该查询花费了10秒。所有和关系都是懒惰的,所以这不是问题。在检查实际执行的SQL时,我注意到查询中有80多个联接。 在进一步检查该问题时,我注意到该问题是由实体类的深入层次结构和实体类之间的关系引起的。所以,我想,我只是让它们变得懒惰,应该可以解决问题。但

  • 用餐问题: 几家人一起出去吃饭。为了增加他们的社会交往,他们愿意坐在桌子上,这样同一家庭的两个成员就不会在同一张桌子上。假设晚餐特遣队有家庭,而家庭有成员。另外,假设有桌可用,并且第1桌的座位容量为。 问题是:我们可以坐在桌子上的最多人数是多少? 编辑:创建一个图并运行最大流算法可以解决这个问题。但如果我们用Dinic算法有2*10^3个顶点,则全局复杂度为O(10^6*10^6)=O(10^12