如何用正则表达式替换字符串并保留其中部分任意内容
我们都知道可以用正则表达式,即regex,来进行字符串的匹配,替换。
但是如果我们想替换字符串中的一部分内容,但是要同时保留字符串中的另一部分内容,无论它是什么,该怎么做呢?
如在某文件中有如下内容:
defined($opt_ws_parser) defined($opt_client) defined($opt_server) ...
如何替换成:
$opt_ws_parser $opt_client $opt_server
也就是,把defined()去掉,但是保留()里的内容。
直接出答案:
/defined(\(\$.*\))/\1
其中,前面一个/ /中的正则表达式是原始字符串,这里面,
- defined( - 原始字符串
- \( -表示要组成一个group,前面需要有\来escape
- \$ -表示字符$,前面需要\来escape
- .* - .表示任意字符,*表示0或任意次重复
- \) - 这里是group的右括号,前面需要有\来escape
- ) -原始字符串中的右括号
后面的\1是要替换成的字符串,这里表示为第一个group,也就是\(\$.*\)中的内容。
在Linux的vim里,在底部输入: