gpt4 book ai didi

regex - 使用 perl 替换除最后一次出现的所有内容

转载 作者:行者123 更新时间:2023-12-04 23:14:34 24 4
gpt4 key购买 nike

我有一个字符串 "a/b/c/d/e" 并且我想将除最后一个 / 之外的所有内容替换为 .即我的输出应该是 a.b.c.d/e

如何修改我的替代命令 s/\//./g 来执行相同的操作?另请注意,层次结构并不总是有 4 个“/”。它可以是任何数字。

最佳答案

替换所有 / ,其中 / 位于字符串的下方;因此排除了最后一个 /

perl -wE'$_ = q(a/b/c/d/e); s{/(?=.*?/)}{.}g; say'

这使用了 positive lookahead , (?=...) 断言 / 进一步向下(在 .*? 之后)的存在,而不消耗任何东西。


另一种方法是使用取反字符类模式进行捕获(然后将其放回字符串中)并仅使用固定字符串 / 在 lookahead

s{/([^/]*)(?=/)}{.$1}g;

上面的第一种方法使用 / 匹配并对其余部分进行前瞻,结果速度更快。可能的原因是在 ([^/]*) 方法中捕获(并且它必须将其复制回字符串中),第一种方法执行单个字符覆盖( .*? 不回溯)。

基准测试:在 v5.10.1 和 v5.27.2(桌面)下速度提高 126%,在 v5.16.1(新服务器)下速度提高 110%。已针对四个路径组件使用 4-10 个字符的长字符串进行测试。

感谢 ikegami感谢您注意到这一点并提示和评论比较。

关于regex - 使用 perl 替换除最后一次出现的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46801422/

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