我正在尝试使用以下格式从字符串变量中提取:$ {var}
鉴于此字符串:
val s = "This is a string with ${var1} and ${var2} and {var3}"
Run Code Online (Sandbox Code Playgroud)
结果应该是
List("var1","var2")
Run Code Online (Sandbox Code Playgroud)
这是尝试,它以异常结束.这个正则表达式有什么问题?
val pattern = """\${([^\s}]+)(?=})""".r
val s = "This is a string with ${var1} and ${var2} and {var3}"
val vals = pattern.findAllIn(s)
println(vals.toList)
Run Code Online (Sandbox Code Playgroud)
和例外:
线程"main"中的异常java.util.regex.PatternSyntaxException:
索引1附近非法重复
\${([^\s}]+)(?=})
注意: - {在正则表达式中有特殊含义.它表示范围.例如a{2,10}表示比赛a中之间2到10次.所以你需要逃避{.
解决方案1
val pattern = """\$\{([^\s}]+)(?=})""".r
Run Code Online (Sandbox Code Playgroud)
您需要访问第一个捕获组以查找结果,然后将其更改为列表.
解决方案2
你也可以像lookbehind一样使用
val pattern = """(?<=\$\{)[^\s}]+(?=})""".r
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |