gpt4 book ai didi

正则表达式 - 对环视功能感到困惑

转载 作者:行者123 更新时间:2023-12-03 11:01:19 26 4
gpt4 key购买 nike

如果我写

(?<=\()\w+(?=\))

对于此字符串: (Test) (Test2) (Test3)

我会得到:Test Test2 Test3

那讲得通。

如果我写
\w+ (?<=\()\w+(?=\))

对于此字符串:LTE(测试)

它什么都不返回..这里有什么问题?

请清楚地解释您的正则表达式,因为它可能难以阅读。

最佳答案

环视不消耗字符!

这是一个逐步查看它的方法(可能不是最好的,但无论如何我都是这样解释的):

第一个字符是 L ,正则表达式引擎将其与 \w+ 进行比较并同意这是一场比赛。 T 也是如此,然后 E .

在空格处,正则表达式引擎在正则表达式中看到一个空格,这也很好。

接下来是开头括号,但是正则表达式看到了什么?请记住,环视不消耗字符,因此 \((?<=\()实际上并没有被消耗和 \(不匹配什么\w+火柴!

您可能会考虑使用这些字符的正则表达式:\w+ \w+ ,但在第二个 \w+ 上有条件,它必须在括号之间找到。条件可能满足,但表达式本身不匹配任何括号!

要使其匹配,您应该添加括号:

\w+ \((?<=\()\w+(?=\))\)

看到匹配空格后,正则引擎看到 ( ,与提供的表达式一致,它向前移动。

然后引擎看到 T .首先,它是否匹配下一个字符, \w+ ?是的,第二,在它之前有一个开放的括号吗?是的。

在前进之前,它看到了积极的展望。前面有闭包吗?不,还有 e ,但是 \w+还是可以满足的,所以匹配 e与另一个 \w .这种情况一直持续到 t . t 之后是否有结束括号?是的,因此进行下一个检查。

它遇到了一个结束括号,它与表达式中的结束括号匹配(注意,文字结束括号可以在这里删除,而您将匹配 LTE (Test)。

但是有了这一切,放弃环视可能同样好:
\w+ \(\w+\)

因为它们给引擎增加了更多的压力,即使它在小规模上不那么明显,但在更大的字符串上可能很重要。

希望它有所帮助,即使是一点点!

关于正则表达式 - 对环视功能感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18237729/

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