我正在尝试使用以下格式从字符串变量中提取:$ {var}
鉴于此字符串:
val s = "This is a string with ${var1} and ${var2} and {var3}"
结果应为
List("var1","var2")
这是尝试,它以异常结束。这个正则表达式有什么问题?
val pattern = """\${([^\s}]+)(?=})""".r
val s = "This is a string with ${var1} and ${var2} and {var3}"
val vals = pattern.findAllIn(s)
println(vals.toList)
和例外:
线程“main”中的异常java.util.regex.PatternSyntaxException:
索引1附近非法重复
\${([^\s}]+)(?=})
答案 0 :(得分:5)
注意: - 正则表达式中的{
具有特殊含义。它表示范围。例如a{2,10}
表示a
到2
次之间的匹配10
。所以你需要逃避{
。
解决方案1
val pattern = """\$\{([^\s}]+)(?=})""".r
您需要访问第一个捕获组以查找结果,然后将其更改为列表。
解决方案2
您也可以使用类似
的lookbehindval pattern = """(?<=\$\{)[^\s}]+(?=})""".r
<强> Ideone Demo 强>