regex – Kleene’s Star:为什么$_ =“a”; s/a */e/g产生:ee

前端之家收集整理的这篇文章主要介绍了regex – Kleene’s Star:为什么$_ =“a”; s/a */e/g产生:ee前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
a *表示零个或多个实例:一个权利?

所以为什么$ _ =“a”; s / a * / e / g产生:ee

可能的答案:它替换字符串:“a”替换为:“e”,它替换空字符串:“”::“e”。或者它代替了纯粹的缺少字母:a用字母:e或它替代了“零出现”:a with an:e

好吧,但是:

$ _ =“b”; s / a * / e / g产生:ebe

它似乎是将空字符串替换为:b的左边,以及下面的右边的空字符串:b

好。但是为什么不这样做:“a”?为什么不把空字符串替换为左边的a,还有一个空字符串在右边:a和字母:a本身得到:eee?

有多少零次出现:a在左侧作为右侧!

解决方法

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

“/ g”修饰符导致正则表达式匹配一次,然后尝试从最后一个匹配停止的位置再次匹配。

出现差异的原因(它不会替换“a”左边的空字符串)是因为“*”是贪婪的 – 它与MOST可能的字符匹配。从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”)字符串。

猜你在找的Perl相关文章