gpt4 book ai didi

regex - 为什么这个正则表达式有效?

转载 作者:行者123 更新时间:2023-12-01 09:39:48 24 4
gpt4 key购买 nike

我想从日期时间偏移值中删除 (CDT)。我在下面编写了一个简单的 regex 来执行此操作,它按最初的预期工作,但在编写它之后我想知道为什么它会工作。为什么结果不停留在 2012 年?

原始字符串: "Thu, 02 Aug 2012 07:42:02 -1525 (CDT)"

正则表达式: .*\d{4}

结果: “2012 年 8 月 2 日星期四 07:42:02 -1525”

最佳答案

之所以有效,是因为 .*greedy .

这意味着 .* 将在执行任何其他操作之前尽可能多地匹配。

当应用正则表达式时,.* 会匹配整个内容,因为它是贪婪的:

Thu, 02 Aug 2012 07:42:02 -1525 (CDT)

然后尝试匹配 \d{4},不幸的是,它不匹配任何东西,因为它在末尾。因此,正则表达式(.* 部分)将回溯(返回并返回之前匹配的内容)一次一个字符,每次检查 \d{4}:

Thu, 02 Aug 2012 07:42:02 -1525 (CDT) [No match]

Thu, 02 Aug 2012 07:42:02 -1525 (CDT) [No match]

Thu, 02 Aug 2012 07:42:02 -1525 (CDT) [No match]

Thu, 02 Aug 2012 07:42:02 -1525 (CDT) [No match]

Thu, 02 Aug 2012 07:42:02 -1525 (CDT) [No match]

Thu, 02 Aug 2012 07:42:02 -1525 (CDT) [No match]

...

Thu, 02 Aug 2012 07:42:02 -1525 (CDT)

在这一点上,它能够匹配 \d{4},所以这就是它要做的:

Thu, 02 Aug 2012 07:42:02 -1525 (CDT)

由于正则表达式中没有其他内容,因此它将在这里结束。

关于regex - 为什么这个正则表达式有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21287775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com