首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Vim正则表达式反向引用

Vim正则表达式反向引用
EN

Stack Overflow用户
提问于 2010-07-27 05:18:25
回答 3查看 47K关注 0票数 64

我想这样做:

代码语言:javascript
复制
%s/shop_(*)/shop_\1 wp_\1/

为什么shop_(*)不匹配任何内容?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-27 05:24:21

如果我没理解错的话,你想让%s/shop_\(.*\)/shop_\1 wp_\1/

转义捕获括号并使用.*匹配任意数量的任意字符。

(您的搜索将搜索"shop_“,后跟任意数量的左括号和右括号)

票数 29
EN

Stack Overflow用户

发布于 2021-01-01 08:45:59

如果您希望避免使用捕获括号进行转义,并使正则表达式模式语法更接近于其他实现(例如,PCRE),则添加\v (非常神奇!)在您的模式开始时(有关更多信息,请参阅:help \magic ):

代码语言:javascript
复制
:%s/\vshop_(*)/shop_\1 wp_\1/
票数 1
EN

Stack Overflow用户

发布于 2020-09-11 01:40:15

@Luc如果你看这里:regex-info,你会看到vim的行为是正确的。这里有一个与sed类似的例子:

代码语言:javascript
复制
echo "123abc456" | sed 's#^([0-9]*)([abc]*)([456]*)#\3\2\1#'
sed: -e expression #1, char 35: invalid reference \3 on 's' command's RHS

而使用“转义”括号时,它是有效的:

代码语言:javascript
复制
echo "123abc456" | sed 's#^\([0-9]*\)\([abc]*\)\([456]*\)#\3\2\1#'
456abc123

我讨厌看到vim中伤--尤其是当它的行为正确的时候。

另外,我试着将它添加为注释,但就是不能正确地格式化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3339080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档