如何解决Vim 正则表达式替换负回溯正在取消捕获组
假设我有以下文字
-o
-O
--object
`-o`
`-O`
我希望它是
`-o`
`-O`
--object
`-o`
`-O`
为此,我尝试使用以下正则表达式
%s/\v(`)@<!(-(--)@<!o|-O)/`\1`/g
然而,最终发生的事情如下
``
``
--object
`-o`
`-O`
由于某种原因,\1
指代 (-(--)@<!o|-O)
的捕获组被忽略。奇怪的是,如果我删除 (`)@<!
,我会得到以下内容
`-o`
`-O`
--object
``-o``
``-O``
所以正则表达式是合理的,但由于某种原因,最初的负面回顾与捕获组混淆。我不确定这里发生了什么。
解决方法
我发现答案似乎是不正确的反向引用。我应该使用 \2
而不是 \1
。看下面
%s/\v(`)@<!(-(--)@<!o|-O)/`\2`/g
^ Used to be a '1'
我不知道 vim regex 将 regex 环视视为捕获组。
请在下面的评论中看到我对此的不确定性。
,使用全局命令:
:g/^-[a-z]/s/.*/`&`
^ .............. start of line
- .............. dash
[a-z] .......... folowed by a to z
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。