我是正规表达的新手,现在就学习。 有人可以帮助理解下面的正则表达式吗?
val varPattern = new scala.util.matching.Regex("""(\$\{(\S+?)\})""", "fullVar", "value")
谢谢, KaviJee
答案 0 :(得分:1)
(\$\{(\S+?)\})
我会尝试用每个符号来解释它:
(
是分组的开始
\$
匹配$符号,反斜杠是因为$是一个具有其他含义的特殊字符
\{
匹配{符号,反斜杠是因为{是一个具有其他含义的特殊字符
(\S+?)
是一个匹配一个或多个非空白字符的组
\}
匹配}符号,反斜杠是因为}是一个具有另一种含义的特殊字符
)
是分组结束
因此整个正则表达式应该匹配:
${ANYWORD}
其中ANYWORD是任何不包含空格的字符。
答案 1 :(得分:1)
scala> "${abc}" match { case varPattern(full, value) => s"$full / $value" }
res0: String = ${abc} / abc
除非您使用标准库正则表达式的组名,否则通常会看到:
scala> val r = """(\$\{(\S+?)\})""".r
r: scala.util.matching.Regex = (\$\{(\S+?)\})
编辑,他们也允许:
scala> val r = """(\$\{(\S+?)\})""".r("full", "val")
r: scala.util.matching.Regex = (\$\{(\S+?)\})
贪婪的例子:
scala> val r = """(\S+?)(a*)""".r
r: scala.util.matching.Regex = (\S+?)(a*)
scala> "xyzaa" match { case r(prefix, suffix) => s"$prefix, $suffix" }
res11: String = xyz, aa
scala> val r = """(\S+)(a*)""".r
r: scala.util.matching.Regex = (\S+)(a*)
scala> "xyzaa" match { case r(prefix, suffix) => s"$prefix, $suffix" }
res12: String = "xyzaa, "