scala正则表达式

常用语法规则

^    匹配输入字符串开始的位置。

$    结尾

.    匹配除"\r\n"之外的任何单个字符。

[]    字符记

[^]    反向字符集

re*    前面的字符出现零次或多次,类似Java中的*;

re+  一次或多次,类似Java中的+;

re?  零次或一次;

re[n]   n次

re[n,]    至少n次

re[n,m]    n到m次

\\w    匹配字母或数字或下划线或汉字

\\W    非

\\d \\D 同上,匹配数组

\\s \\S    同上,匹配任意空白符

注意:在 Java 和 Scala 中字符串中的反斜线是转义字符。所以如果你要输出 .\.,你需要在字符串中写成 .\\. 来获取一个反斜线

基本的使用

def main(args: Array[String]): Unit = {

    //创建regex对象
    val pattern : Regex = "Scala".r
    val str = "Scala is Scalable and cool"
    //得到option对象
    val maybeString: Option[String] = pattern.findFirstIn(str)
    println(maybeString)
  }

实例中使用 String 类的 r() 方法构造了一个Regex对象。

然后使用 findFirstIn 方法找到首个匹配项。

如果需要查看所有的匹配项可以使用 findAllIn 方法。

你可以使用 mkString( ) 方法来连接正则表达式匹配结果的字符串,并可以使用管道(|)来设置不同的模式:

def main(args: Array[String]) {
    val pattern = new Regex("(S|s)cala")  // 首字母可以是大写 S 或小写 s
    val str = "Scala is scalable and cool"

    println((pattern findAllIn str).mkString(","))   // 使用逗号 , 连接返回结果
  }

输出:Scala,scala

如果你需要将匹配的文本替换为指定的关键词,可以使用 replaceFirstIn( ) 方法来替换第一个匹配项,使用 replaceAllIn( ) 方法替换所有匹配项,实例如下:

def main(args: Array[String]) {
      val pattern = "(S|s)cala".r
      val str = "Scala is scalable and cool"
      
      println(pattern replaceFirstIn(str, "Java"))
   }

输出:Java is scalable and cool

匹配邮箱格式

要求如下:开头必须是字母,出现一次或多次;后面可以出现数字;@后面字母或数字的组合至少出现一次,搭配.号可以出现一次到三次;结尾必须是字符。

def main(args: Array[String]): Unit = {
//由regex得到pattern,由pattern得到matcher,由matcher给出判断。
    val regex = "^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z]{1,}$".r;
    val pattern: Pattern = regex.pattern
    val input = "";

    val matcher: Matcher = pattern.matcher(input)
    println(matcher.matches())
  }

经测试,input为指定的格式时输出true,否则输出false;