我使用groovy编写一个脚本来替换UNC服务器名称和目录结构的一部分。我有以下内容:
def patternToFind = /\\\\([a-zA-Z0-9-]+)\\share\\([a-zA-Z]+)/
def patternToReplace = '\\\\\\\\SHARESERVER\\\\share\\\\OPS'
这很有效,但所有这些都很丑陋。我在正则表达式中理解为什么\\\\
用于查找\\
,但让我感到困惑的是为什么在替换中我必须使用四个\
&#39 ; s等于\
。
如果有人有更好的方法,我会非常感激。目标是取代
\\<server>\share\<env>
使用<server>
和<env>
谢谢!
编辑:我想我应该澄清一下。 SHARESERVER和OPS实际上是变量。所以真正的最终结果将是:def serverName = //some passed in server
def env = //some passed in env
def patternToFind = /\\\\([a-zA-Z0-9-]+)\\NAS\\([a-zA-Z]+)/
def patternToReplace = '\\\\\\\\' + serverName + '\\\\share\\\\' + env
因此,我认为这样做的唯一方法是构建一个字符串文字来替换我正在寻找的部分。
我是第一个承认我在reg ex中吮吸的人,所以如果你可以用它们来捕捉字符串中的值并用另一个值替换那个值,那我就是所有的耳朵。
答案 0 :(得分:2)
不能与
一起使用def patternToReplace = $/\\SHARESERVER\share\OPS/$
答案 1 :(得分:1)
如果你想用Java中的正则表达式使用文字替换字符串(而不是涉及$n
反向引用的字符串),那么最安全的做法是使用Matcher.quoteReplacement
:
def patternToReplace = Matcher.quoteReplacement(/\\SHARESERVER\shares\OPS/)