正则表达式 - Scala

时间:2017-09-20 18:02:44

标签: regex scala

我是正规表达的新手,现在就学习。 有人可以帮助理解下面的正则表达式吗?

val varPattern = new scala.util.matching.Regex("""(\$\{(\S+?)\})""", "fullVar", "value")

谢谢, KaviJee

2 个答案:

答案 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, "