You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Perl正则将路径中每个字符转换为带反斜杠的形式?

正确的Perl正则表达式方案

问题背景(翻译后)

我现有如下内容:

Aenean placerat >> /example/alpha.txt
est et rutrum ultrices >> /example/beta.txt
dolor nibh ultricies nulla >> /example/gamma delta.txt

需要转换为:

Aenean placerat >> \/\e\x\a\m\p\l\e\/\a\l\p\h\a\.\t\x\t
est et rutrum ultrices >> \/\e\x\a\m\p\l\e\/\b\e\t\a\.\t\x\t
dolor nibh ultricies nulla >> \/\e\x\a\m\p\l\e\/\g\a\m\m\a\ \d\e\l\t\a\.\t\x\t

我尝试了正则表达式 's/(.*) >> (.)*/$1 >> \\$2/gm' 但无法实现需求,请问如何编写正确的Perl正则表达式?


你的问题核心是要给>>之后的每个字符前添加反斜杠,之前的正则失效原因是:(.)*虽能匹配>>后的所有字符,但捕获组仅保留最后一个字符,最终只能给单个字符加反斜杠,无法覆盖全部内容。

以下是两种可行的Perl正则写法:

方法1:使用e修饰符执行代码逻辑

s/(.*? >> )(.*)/$1 . join('\\', split //, $2)/egm
  • 细节说明:
    • (.*? >> ):非贪婪匹配>>及之前的全部内容,存入捕获组$1
    • (.*):匹配>>之后的所有字符,存入捕获组$2
    • /e修饰符允许替换段执行Perl代码:将$2按单个字符拆分,用反斜杠拼接后,再与$1组合输出

方法2:正向预查+全局替换单个字符

s/(?<=>> )./\\$&/gm
  • 细节说明:
    • (?<=>> ):正向预查,确保目标字符位于>> 之后
    • .:匹配任意单个字符
    • \\$&:给当前匹配的字符($&代表当前匹配内容)前添加反斜杠
    • /g全局修饰符会遍历处理>> 后的每一个字符

两种写法都能精准实现你需要的转换效果。

内容的提问来源于stack exchange,提问作者sjmnko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:55:23