GString令牌的正则表达式

时间:2014-11-14 19:14:36

标签: regex groovy

我有这种格式的ID:

1.5.31.14.${CHANNEL}.${SLOT}

它作为字符串从文件读入,我正在尝试用其他变量替换$ {}标记。

然而,当我跑步时:

id.replaceAll("\${CHANNEL}", "3")

它将尝试用名为

的值替换$ {CHANNEL}
CHANNEL

在函数内并抛出错误。

我一直在疯狂地想弄清楚我可以用什么来代替

${CHANNEL} and ${SLOT}
ID中的

如果有人有任何建议,请告诉我。

修改

这是错误:

Exception thrown

groovy.lang.MissingPropertyException: No such property: CARD for class: ConsoleScript91

编辑2 这是我运行的代码:

def id = '1.5.31.14.${CHANNEL}.${SLOT}' 
id = id.replaceAll('\${CHANNEL}', '3')
replaced = id.replaceAll('\${SLOT}', '2')
print replaced

这是错误:

Exception thrown

java.util.regex.PatternSyntaxException: Illegal repetition near index 0

${CHANNEL}

^

at java_lang_String$replaceAll$1.call(Unknown Source)

at ConsoleScript5.run(ConsoleScript5:2)

1 个答案:

答案 0 :(得分:2)

你需要逃避美元符号$和花括号{}。请注意\是一个特殊字符,因此它应该自行转义:

def id = '1.5.31.14.${CHANNEL}.${SLOT}' 
replaced = id.replaceAll('\\$\\{CHANNEL\\}', '3').replaceAll('\\$\\{SLOT\\}', '2')
replaced2 = id.replaceAll(/\$\{CHANNEL\}/, '3').replaceAll(/\$\{SLOT\}/, '2')

assert replaced == '1.5.31.14.3.2'
assert replaced == replaced2