Scala 正则表达式学习笔记

正则表达式(Regular Expression)是描述字符串模式的一种语法规则。Scala 支持使用 Java 的正则表达式库来处理字符串的匹配、查找、替换等操作。

基本语法

Scala 正则表达式的基本语法和 Java 的正则表达式类似,用一些特殊字符和正常字符来组成模式,其中特殊字符用于表示某种匹配模式。

下面是一些常用的特殊字符:

  • .:匹配任意单个字符,除了换行符。
  • []:匹配方括号内的字符中的任意一个。
  • [^]:匹配不在方括号内的字符中的任意一个。
  • *:匹配前一个字符零次或多次。
  • +:匹配前一个字符一次或多次。
  • ?:匹配前一个字符零次或一次。
  • ():将其中的内容作为一个分组。
  • |:匹配两个或多个分支中的任意一个。
  • \d:匹配数字字符。
  • \D:匹配非数字字符。
  • \w:匹配单词字符(字母、数字、下划线)。
  • \W:匹配非单词字符。

在 Scala 中,通过 Regex 类来创建正则表达式对象,可以直接在字符串中使用正则表达式。

例如,创建一个匹配邮箱地址的正则表达式:

scalaCopy Code
val emailRegex = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}".r

实例

下面是一些实例,演示了如何使用 Scala 的正则表达式库进行字符串匹配、查找、替换等操作。

匹配字符串

scalaCopy Code
val str = "hello world" val pattern = "he.*ld".r pattern.findFirstIn(str) // Some(hello world)

查找所有匹配项

scalaCopy Code
val str = "hello 123 world 456" val pattern = "\\d+".r pattern.findAllIn(str).mkString(",") // 123,456

替换匹配项

scalaCopy Code
val str = "hello 123 world 456" val pattern = "\\d+".r pattern.replaceAllIn(str, "XXX") // hello XXX world XXX

带分组的匹配和替换

scalaCopy Code
val str = "first_name=Tom&last_name=Jerry" val pattern = "(first|last)_name=(\\w+)".r val result = pattern.replaceAllIn(str, m => s"${m.group(1)}_name=${m.group(2).toUpperCase}") // first_name=TOM&last_name=JERRY

上述代码中,使用 m.group(1) 表示第一个分组((first|last)),用 m.group(2) 表示第二个分组((\w+))。通过 toUpperCase 方法将第二个分组中的字母都转换为大写。最终的输出结果为 first_name=TOM&last_name=JERRY

总结

Scala 的正则表达式功能与 Java 类似,使用起来也很方便。通过掌握正则表达式的基础语法和常用操作,能够快速解决字符串处理中的常见问题。