我想从字符串中提取表达式${*}
。
val example = "Hello ${foo.bar} World"
但是美元符号和大括号是表达式语法的一部分,所以我试图逃避它。
val expr = "\\$\\{[a-zA-Z0-9\\w]*\\}".r
但这不会奏效,println
不会打印任何内容:
for (ex <- expr.findAllMatchIn(example)) println(ex)
任何人都知道出了什么问题?有一个更优雅的正则表达式吗?
答案 0 :(得分:2)
这是因为你没有考虑.
中的foo.bar
,而是这样做:
\\$\\{[a-zA-Z0-9.\\w]*\\} // allows for a . to also be in the string
为了获得最大的灵活性,您可以:
\\$\\{[^}]*.
答案 1 :(得分:2)
您可以使用更简单的正则表达式,并且可以通过使用三引号使其更容易阅读(避免需要双重转义\\
):
val example = "Hello ${foo.bar} World ${bar.foo}"
//> example : String = Hello ${foo.bar} World ${bar.foo}
val expr = """\$\{.*?\}""".r //> expr : scala.util.matching.Regex = \$\{.*?\}
for (ex <- expr.findAllMatchIn(example)) println(ex)
//> ${foo.bar}
//| ${bar.foo}