Regex 正则表达式引擎的规则。正则表达式的贪婪、渴望和懒惰

Regex 正则表达式引擎的规则。正则表达式的贪婪、渴望和懒惰,regex,regex-greedy,Regex,Regex Greedy,众所周知,regex引擎在工作时使用两条规则: 规则1:最早开始的比赛获胜或使用正则表达式 你很渴望 规则2:正则表达式是贪婪的 这些行出现在教程中: 这两条规则是相辅相成的 它渴望给你一个结果,所以它所做的就是试图 继续让第一个做所有的工作 当我们已经在它的中间,让我们继续前进,到达 字符串的结尾,然后当它不起作用时,它就会起作用 回溯并尝试另一个 它不会回到开始;它不会尝试所有的方法 其他组合的 它仍然渴望给你一个结果,所以它说,如果我只是给你一个结果呢 退一步 这能让我把结果还给你吗

众所周知,regex引擎在工作时使用两条规则:

  • 规则1:最早开始的比赛获胜或使用正则表达式 你很渴望
  • 规则2:正则表达式是贪婪的
这些行出现在教程中:

这两条规则是相辅相成的

它渴望给你一个结果,所以它所做的就是试图 继续让第一个做所有的工作

当我们已经在它的中间,让我们继续前进,到达 字符串的结尾,然后当它不起作用时,它就会起作用 回溯并尝试另一个

它不会回到开始;它不会尝试所有的方法 其他组合的

它仍然渴望给你一个结果,所以它说,如果我只是给你一个结果呢 退一步

这能让我把结果还给你吗

如果成功了,那就太好了。它可以在那里完成

它不必在字符串中继续回溯,查看 为了某种更好的匹配或更进一步的匹配

我不太理解这些句子(尤其是第二句(“当我们……”)和最后一句(“不必回溯”)的句子

这几行是关于懒惰模式的

它仍然像贪婪者一样服从于整体比赛

  • 很明显
我不明白下面的比喻:

选择一个懒惰的策略或策略并不一定快或慢 一个贪婪的策略,但它可能会匹配不同的东西

现在,无论是快还是慢,这有点像说,如果 你把车钥匙和太阳镜丢在家里了,是吗 最好从厨房开始,或者从厨房开始 客厅

你不知道哪一个会产生最好的结果,而你 不知道谁会先找到太阳镜还是钥匙 第一;这只是关于开始搜索的不同策略

因此,根据你的起点,你可能会得到不同的结果, 但从一个地方或另一个地方开始并不一定更快

“快还是慢”是什么意思

我将画出它是如何工作的(在这两种情况下都是)。所以我会仔细考虑这些问题,直到我发现这里发生了什么!) 我需要准确无误地理解它


谢谢。

让我们试一下这个例子

对于
的输入,这是针对regex上的测试输入的输入,类似于
/this.*input/

匹配将是
这是测试输入的输入

将要做的是

  • 开始检查字符串,它将获得与
    这是输入的匹配项

  • 现在它在字符串的中间,它会继续看它是否能在它上面匹配(这是<代码>,我们已经在中间了,让我们继续下去< <代码> >

  • 它将匹配到
    这是测试输入的输入
    ,并持续到字符串末尾

  • 最后,有些东西不是比赛的一部分,所以解释器“回溯”到最后一次比赛

在最后一部分,我们将介绍更多关于OR正则表达式的内容

将输入字符串视为
cdacdgabcdef
和正则表达式
(ab | a)。*

一个常见的错误是认为它将返回更精确的一个(在本例中为“abcdef”),但它将返回“acdgabcdef”,因为
A
匹配是第一个匹配的

这里发生的事情是:有一些东西与这一部分相匹配,让我们继续到模式的下一部分,忘掉这一部分中的其他选项

对于懒惰和贪婪的问题,@AvinashRaj的链接非常清楚,我在这里不再重复。

这里的“快”和“慢”指的是性能、找到匹配的速度或失败的速度。从你发布的你正在阅读的教程的引语来看,你看起来不太好。我建议你看看更好的。