加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:25:17 所属栏目:大数据 来源:网络整理
导读:a *表示零个或多个实例:一个权利? 所以为什么$ _ =“a”; s / a * / e / g产生:ee 可能的答案:它替换字符串:“a”替换为:“e”,它替换空字符串:“”::“e”。或者它代替了纯粹的缺少字母:a用字母:e或它替代了“零出现”:a with an:e 好吧,但
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”)字符串。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读