Vim正则表达式反向引用

nny*_*yby 60 regex vim

我想做这个:

%s/shop_(*)/shop_\1 wp_\1/
Run Code Online (Sandbox Code Playgroud)

为什么不shop_(*)匹配?

Dae*_*yth 71

这里有几个问题.

  1. vim regexen中的parens不用于捕获 - 你需要\( \)用于捕获.

  2. *并不代表你的想法.它的意思是"前面的0或更多",所以你的正则表达式意味着"一个字符串,shop_后面跟着0+ (,然后是一个文字).
    你正在寻找.,正则表达式是"任何字符".放在一起作为一个明星.*它表示"0或更多任何字符".您可能至少需要一个字符,因此请使用.\+(+表示"之前的1个或更多")

用这个:%s/shop_\(.\+\)/shop_\1 wp_\1/.

可选,结束于g后最后的斜线,以取代所有实例在同一行,而不仅仅是第一.


Ste*_*hen 20

如果我理解正确,你想要 %s/shop_\(.*\)/shop_\1 wp_\1/

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

(您的搜索正在搜索"shop_",后跟任意数量的左括号,后跟右括号)