GString token 的正则表达式

标签 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)

最佳答案

您需要转义美元符号 $ 和大括号 {}。请注意 \ 是一个特殊字符,因此应该对其本身进行转义:

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/

相关文章:

groovy - 如何在soapui中使用Groovy运行测试用例和测试套件?

javascript - 匹配数字代码的正则表达式(数字、星号和锐号)

javascript - Jquery检测命令/自定义BBcode

java - 使用 Groovy 修改节点标签的 Jenkins/Hudson CLI API

gradle - 无法加载类 grails.plugins.rendering.image.ImageRenderingService Grails 4 渲染 :2. 03

android-studio - Android Studio 3 不在 Spock 中运行测试

ruby - 如何使用正则表达式按 HTML 标签拆分

java - API 21(android 5) 及以下版本上的正则表达式模式错误

ruby 错误 : "Character Class has ' [' without escape" AND "Premature end of character class"

groovy - 禁用 Groovy 葡萄的自动下载