scala的正则与java略有不同,除了可直接调用java里的相关类外,scala也提供了regex类来处理相应需求。

最常见的一种应用场景,寻找字符串中的连续字母,

val pattern = "[a-zA-Z]+".r
pattern.findAllIn("Hello, world").foreach(println(_))

若是pattern里分了group则需稍做修改,

val pattern = "([a-zA-Z]+)=([0-9]+)".r
pattern.findAllIn("a=1,b=2").matchData.foreach(println(_.group(1)))

group相关信息需要通过matchData获取。

上面两种调用方式其实与java正则无太大差异,真正的不同在于scala中的正则可以进行pattern matching。

val CommandPattern = "([a-z]+)\\s+(.*?)".r
command match {
   case CommandPattern("help", content) => println(content)
   case CommandPattern("scan", content) => println(content)
   case _ => println("default")
}

在进行字符串匹配时,上述用法会特别方便。