使用Regex从字符串中提取变量

时间:2016-06-26 03:39:50

标签: regex scala

我正在尝试使用以下格式从字符串变量中提取:$ {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}]+)(?=})

1 个答案:

答案 0 :(得分:5)

注意: - 正则表达式中的{具有特殊含义。它表示范围。例如a{2,10}表示a2次之间的匹配10。所以你需要逃避{

解决方案1 ​​

val pattern = """\$\{([^\s}]+)(?=})""".r

您需要访问第一个捕获组以查找结果,然后将其更改为列表。

解决方案2

您也可以使用类似

的lookbehind
val pattern = """(?<=\$\{)[^\s}]+(?=})""".r

<强> Ideone Demo