Regex 如何在File content replacer teamcity变量中转义反斜杠
例如,如果我需要替换一些字符串Regex 如何在File content replacer teamcity变量中转义反斜杠,regex,teamcity,build-agent,Regex,Teamcity,Build Agent,例如,如果我需要替换一些字符串 %teamcity.agent.work.dir%\\nd\r\\bin\\isf。但是如果变量teamcity.agent.work.dir是C:\BuildAgent\work\,它将删除所有反斜杠并将文本替换为C:BuildAgentwork\nd\r\bin\isf 若我一开始不知道变量的值,那个么我怎么能避开变量中的所有反斜杠呢 \Q%env.NDRIVE%\E\nd\r\bin\isf-它不起作用。TeamCity不支持对%-references中的值
%teamcity.agent.work.dir%\\nd\r\\bin\\isf
。但是如果变量teamcity.agent.work.dir
是C:\BuildAgent\work\
,它将删除所有反斜杠并将文本替换为C:BuildAgentwork\nd\r\bin\isf
若我一开始不知道变量的值,那个么我怎么能避开变量中的所有反斜杠呢
\Q%env.NDRIVE%\E\nd\r\bin\isf-它不起作用。TeamCity不支持对%-references中的值进行额外处理,它只能“按原样”使用 在您的情况下,可能的解决办法是:
- 不要使用File content replacer并在脚本中执行相关逻辑作为构建的第一步,如果需要,您可以在脚本中处理转义李>
- 以已转义的形式将值和作为参数转义到TeamCity。由于File content replacer在构建步骤之前工作,因此这可以在构建链中的上一个构建和链中构建的参数中完成李>
- 编写一个函数,该函数将为预定义的一组参数提供转义值
grep-F
),而不是原来的regex模式:
如果您使用(XML或Kotlin DSL变体),您还可以使用另一种模式(除了REGEX
和FIXED_STRINGS
):REGEX\u MIXED
。在此模式下,搜索模式仍将被解释为正则表达式,但替换文本将是这样的:\
和$
字符将不再具有任何特殊意义
如果将设置导出到Kotlin,示例文件内容替换器配置可能如下所示:
features {
replaceContent {
fileRules = "**/*"
pattern = "(?iu)the\h+pattern\h+to\h+search\h+for"
regexMode = FileContentReplacer.RegexMode.REGEX_MIXED
replacement = """%teamcity.agent.work.dir%\nd_r\bin\isf"""
}
}
还有另一个解决方案,但有点像黑客。只需使用两个单独的文件内容替换程序分两个阶段进行替换
- 第一个应该是正则表达式匹配器。它使用正则表达式模式查找要替换的字符串,并将其替换为固定的已知字符串(GUID或任何唯一的魔法字符串即可)
- 第二个文件内容替换程序匹配相同的文件,但它是一个固定字符串匹配程序,并使用参数值替换第一步中的固定字符串。因为它是一个固定的字符串匹配器,所以参数值中的反斜杠被保留