📜  Scala-正则表达式(1)

📅  最后修改于: 2023-12-03 15:19:58.508000             🧑  作者: Mango

Scala 正则表达式

Scala 中的正则表达式非常强大并且易于使用。这篇文章将介绍 Scala 中的正则表达式,包括正则表达式的基础语法、模式匹配、组匹配以及替换等。

基础语法

在 Scala 中,可以通过字符串的 r 方法来创建一个正则表达式对象。例如:

val pattern = "hello world".r

上述代码中,pattern 是一个 Regex 对象,可以用于匹配字符串。

简单模式

Scala 中的正则表达式与其他语言中的正则表达式大致相同。简单模式包括字符、字符类和量词。

字符:

  • .:匹配任意字符
  • \w:匹配字母、数字、下划线
  • \d:匹配数字
  • \s:匹配空白字符

字符类:

  • [abc]:匹配 a、b 或 c 中的一个
  • [^abc]:匹配除 a、b 和 c 以外的任意字符
  • [a-z]:匹配 a 到 z 之间的任意字符
  • [^a-z]:匹配除 a 到 z 之间的任意字符以外的任意字符

量词:

  • *:匹配零个或多个
  • +:匹配一个或多个
  • ?:匹配零个或一个
  • {n}:匹配恰好 n 次
  • {n,}:匹配至少 n 次
  • {n,m}:匹配 n 到 m 次

例如,以下是一些示例:

val regex1 = """abc""".r  // 匹配 "abc"
val regex2 = """\d+""".r  // 匹配任意数字
val regex3 = """\w{3}""".r  // 匹配任意三个字母、数字或下划线
模式匹配

Scala 中的模式匹配非常强大且易于使用。可以使用正则表达式进行模式匹配。

val pattern = """(\d{4})-(\d{2})-(\d{2})""".r
val dateStr = "2021-07-29"
dateStr match {
  case pattern(year, month, day) => println(s"Year: $year, Month: $month, Day: $day")
  case _ => println("Invalid date format")
}

上述代码中,定义了一个日期格式的正则表达式,并对一个日期字符串进行模式匹配。如果匹配成功,则打印日期中的年份、月份和日份;否则打印 "Invalid date format"。

组匹配

Scala 中,可以使用 () 对正则表达式进行分组。在模式匹配中,也可以使用组来获取匹配的子串。

val pattern = """(\w+)\s(\w+)""".r
val name = "John Doe"
name match {
  case pattern(first, last) => println(s"First Name: $first, Last Name: $last")
  case _ => println("Invalid name format")
}

上述代码中,定义了一个正则表达式,匹配形如 "John Doe" 的字符串。使用组来获取匹配中的姓和名。

替换

Scala 中的 replaceAll 方法可以用于替换字符串中的子串。

val pattern = """(\d{4})-(\d{2})-(\d{2})""".r
val input = "Today is 2021-07-29"
val output = pattern.replaceAllIn(input, "YYYY/MM/DD")
println(output)  // Today is YYYY/MM/DD

上述代码中,使用正则表达式替换输入字符串中的日期部分。

总结

Scala 中的正则表达式非常强大,可以用于字符串匹配、模式匹配和替换等多种用途。本文介绍了正则表达式的基础语法、模式匹配、组匹配和替换等。希望能够帮助您更好地使用 Scala 的正则表达式功能。