【发布时间】:2019-02-27 08:28:41
【问题描述】:
跟进我之前的 question 关于使用 Golang 的正则表达式在字符串之间替换的内容。我现在添加了一些复杂性。以下是我的文件的上下文:
foo:
blahblah
MYSTRING=*
bar:
blah
blah
MYSTRING=*
我需要用我选择的字符串替换MYSTRING= 和\n 之间的内容(如原帖中所述)。我可以这样做:
var re = regexp.MustCompile(`(MYSTRING=).*`)
s := re.ReplaceAllString(content, `${1}stringofmychoice`)
但现在我只需要在某个特定事件发生后进行匹配和替换。这样我的文件的内容就可以如下所示:
foo:
blahblah
MYSTRING=foostring
bar:
blah
blah
MYSTRING=barstring
ReplaceAllString 显然替换了一切,这不是我想要的。有没有办法只匹配和替换某个字符串之后的第一个匹配项?
了解所有这些的背景知识。我正在尝试编写一个程序来编辑给定docker-compose.yml 文件及其环境变量的内容。我需要根据列出的服务以不同方式编辑环境变量MYSTRING。在上面的示例中,两个不同的服务将是 foo 和 bar。
【问题讨论】:
-
您是否必须捕获
MYSTRING=,然后在替换模式中使用反向引用?你能硬编码MYSTRING=吗? -
是的,我可以硬核
MYSTRING=。 -
当正则表达式不再是解决问题的最佳方案时,comes a time...