gpt4 book ai didi

regex - 捕获组中带有贪婪修饰符的奇怪行为

转载 作者:行者123 更新时间:2023-12-04 04:35:03 25 4
gpt4 key购买 nike

考虑以下命令:

text <- "abcdEEEEfg"

sub("c.+?E", "###", text)
# [1] "ab###EEEfg" <<< OKAY
sub("c(.+?)E", "###", text)
# [1] "ab###EEfg" <<< WEIRD
sub("c(.+?)E", "###", text, perl=T)
# [1] "ab###EEEfg" <<< OKAY

第一个完全符合我的期望,基本上只匹配第一个E。第二个基本上应该与第一个相同,因为我所做的只是添加了一个捕获组(尽管我没有使用它),但是对于某些原因是它捕获了一个额外的E。也就是说,它并不完全贪婪(即如果它捕获了所有E,则它是完全不贪婪的)。即使很奇怪,它实际上仍然与模式匹配,即使 sub结果表明 .+?片段被遗漏了 EE,其余正则表达式也不再匹配。这表明在计算匹配子表达式的长度时,而不是在实际匹配中,存在偏移问题。

最后一个是完全相同的,但是可以在PCRE上运行,并且可以按预期运行。

我是否缺少某些东西,或者这种行为是没有证件的/ buggy ?

最佳答案

R使用版本0.8的 libtre 。为了获得更高的稳定性,您应该始终使用perl = TRUE

注意

sub("c(.+?)E?", "###", text)

作品。

关于regex - 捕获组中带有贪婪修饰符的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056044/

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