在Scala中你只须要在正则表达式字符串后边加上一个".r"就能够使用正则表达式了。es6
scala> val numPattern = "[0-9]+".r numPattern: scala.util.matching.Regex = [0-9]+
下面介绍正则表达式经常使用的两个匹配方法findFirstIn和findAllIn。正则表达式
方法findFirstIn能够匹配到第一个符合正则表达式规则的字符串,没有匹配到任何结果的状况下返回None。ui
scala> val address = "123 Main Street Suite 101" address: String = 123 Main Street Suite 101 scala> numPattern.findFirstIn(address) res4: Option[String] = Some(123) scala> numPattern.findFirstIn("abc") res5: Option[String] = None
方法findAllIn能够匹配到全部符合正则表达式规则的字符串,返回的结果是一个Iterator。你能够把它转化为一个Array来使用。若是没有匹配到任何符合规则的字符换那么,它将返回一个空Iterator。es5
scala> val matchs = numPattern.findAllIn(address) matchs: scala.util.matching.Regex.MatchIterator = non-empty iterator scala> matchs.getClass() res6: Class[_ <: scala.util.matching.Regex.MatchIterator] = class scala.util.matching.Regex$MatchIterator scala> matchs.toArray.foreach(println(_)) 123 101 scala> val matchs = numPattern.findAllIn("abc") matchs: scala.util.matching.Regex.MatchIterator = empty iterator
接下来看看如何使用正则表达式来替换字符串。scala
咱们能够调用字符串的replaceAll方法来进行字符换替换,这个方法接收两个参数,第一个是正则表达,第二个是要被替换成的字符串。code
scala> "123 Main Street".replaceAll("[0-9]", "x") res13: String = xxx Main Street
还有一种方式是,提早编译好一个正则表达式,而后调用正则表达式的replaceAllIn方法来进行替换。字符串
scala> regex.replaceAllIn("123 Main Street", "x") res15: String = xxx Main Street
若是你只想替换第一次出现的位置的字符换,而不是全部匹配的位置,那么你能够使用字符串的replaceFirst或者正则表达式的replaceFirstIn方法。get
scala> "123".replaceFirst("[0-9]", "x") res16: String = x23 scala> "[0-9]".r.replaceFirstIn("123","x") res20: String = x23
而后咱们继续讨论如何使用正则表达式来拆分字符串。it
看一看如何使用正则表达式把"100 Bananas"拆分为100何Bananas两部分。io
scala> val pattern = "([0-9]+) ([a-zA-Z]+)".r pattern: scala.util.matching.Regex = ([0-9]+) ([a-zA-Z]+) scala> val pattern(count, fruit) = "100 Bananas" count: String = 100 fruit: String = Bananas