gpt4 book ai didi

regex - 克莱恩之星:为什么$ _ = “a”; s/a */e/g农产品:ee

转载 作者:行者123 更新时间:2023-12-03 08:54:24 27 4
gpt4 key购买 nike

a*表示零个或多个实例:对吗?

那么$_ = "a"; s/a*/e/g为什么会产生:ee
可能的答案:它将字符串“a”替换为:“e”,并将空字符串:“”替换为:“e”。或将字母a的不存在替换为字母e或将a的“零出现”替换为an:e

好的,但是:
$_ = "b"; s/a*/e/g产生:ebe
似乎正在替换b左侧的空字符串以及b右侧的空字符串

好。但是,为什么它不这样做:“a”?它为什么不替换a左侧的空字符串,也不替换:a以及字母:a本身的空字符串,以获取:eee

零的出现次数与之相同:左侧的a和右侧的0!

最佳答案

您对结果为什么是"ee""ebe"的分析是完全准确的。

“/ g”修饰符使正则表达式匹配一次,然后尝试从上次匹配停止的地方再次匹配。

差异的原因(它不会替换"a"左侧的空字符串)是因为"*"贪婪-它与大多数可能的字符匹配。从 perldoc perlre :

By default, a quantified subpattern is "greedy", that is, it will match as many times as possible (given a particular starting location) while still allowing the rest of the pattern to match.



因此它匹配零个“a”,并查看它是否可以匹配更多个。由于字符串中还有更多“a”,因此它将再匹配一个。尝试搭配更多。没有?做完了因此,我们匹配第一个“a”。

然后,“/ g”使我们尝试再次匹配(从上次匹配完成后停止的位置开始),现在匹配空字符串(零个“a”)。

关于regex - 克莱恩之星:为什么$ _ = “a”; s/a */e/g农产品:ee,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11855652/

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