我有一个以下格式的 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)
最佳答案
您需要转义美元符号 $
和大括号 {}
。请注意 \
是一个特殊字符,因此应该对其本身进行转义:
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
关于GString token 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26937247/