Scala 正则表达式学习笔记
正则表达式(Regular Expression)是描述字符串模式的一种语法规则。Scala 支持使用 Java 的正则表达式库来处理字符串的匹配、查找、替换等操作。
基本语法
Scala 正则表达式的基本语法和 Java 的正则表达式类似,用一些特殊字符和正常字符来组成模式,其中特殊字符用于表示某种匹配模式。
下面是一些常用的特殊字符:
.
:匹配任意单个字符,除了换行符。[]
:匹配方括号内的字符中的任意一个。[^]
:匹配不在方括号内的字符中的任意一个。*
:匹配前一个字符零次或多次。+
:匹配前一个字符一次或多次。?
:匹配前一个字符零次或一次。()
:将其中的内容作为一个分组。|
:匹配两个或多个分支中的任意一个。\d
:匹配数字字符。\D
:匹配非数字字符。\w
:匹配单词字符(字母、数字、下划线)。\W
:匹配非单词字符。
在 Scala 中,通过 Regex
类来创建正则表达式对象,可以直接在字符串中使用正则表达式。
例如,创建一个匹配邮箱地址的正则表达式:
scalaCopy Codeval emailRegex = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}".r
实例
下面是一些实例,演示了如何使用 Scala 的正则表达式库进行字符串匹配、查找、替换等操作。
匹配字符串
scalaCopy Codeval str = "hello world"
val pattern = "he.*ld".r
pattern.findFirstIn(str) // Some(hello world)
查找所有匹配项
scalaCopy Codeval str = "hello 123 world 456"
val pattern = "\\d+".r
pattern.findAllIn(str).mkString(",") // 123,456
替换匹配项
scalaCopy Codeval str = "hello 123 world 456"
val pattern = "\\d+".r
pattern.replaceAllIn(str, "XXX") // hello XXX world XXX
带分组的匹配和替换
scalaCopy Codeval 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 类似,使用起来也很方便。通过掌握正则表达式的基础语法和常用操作,能够快速解决字符串处理中的常见问题。