平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“正则表达式替换字符串并保留其中部分任意内容(最新推荐)”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
如何用正则表达式替换字符串并保留其中部分任意内容
我们都知道能够用正则表达式,即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里,在底部输入:
:%s/defined(\(\$.*\))/\1
这里%表示适用来文件每一行,s是substitute的意思。
在shell里,能够用如下所示sed命令:
sed -i 's/defined(\(\$.*\))/\1/g' filename
这里最后一个g是表示替换所有符合前面正则规则的字符串。
补充:采用正则表达式替换(保留部分内容不变)
正则表达式保留部分内容替换
需求:
把trim(ABC)替换成trim(replace(ABC,char(9),' ')
需把ABC保留不变,替换其它的。
实现:
trim\(([^).]*)\) 替换成 trim\(replace\($1,char\(9\),' '\)
实际处理时,在查找的时候用括号括起来的代表一部分,在替换的时候能够用$1,$2……引用。

轻松例子
把前面三位数字替换成 =,保留其它不变。[0-9]{3} 表示三位数字,(.*) 表示其它,用括号括起便于后面替换时引用。

替换完结果是 ===yiersan 除了前面 123 后面的都被括号括起来了,而且后面用 $1 引用,所以保留不变。
注意:
实际处理时,有些编辑器选择采用正则表达式的时候有选择正则表达式的类型。这里是Perl
到此这篇关于如何用正则表达式替换字符串同时保留其中部分任意内容的文章就介绍到这了,更多相关正则表达式替换字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!
- 一篇文章了解正则表达式的替换技巧
- 详解易语言正则表达式的多行匹配替换
- 正则表达式的字符串替换方法
- 如何采用正则表达式保留部分内容的替换功能

