**1. 正则实现方式**
我们可以使用 scala.util.matching.Regex ,或 String 自带的一些方法来完成正则工作。
<br/>
**2. String实现正则**
```scala
// matches:匹配返回true,否则返回false
"!123".matches("[a-zA-Z0-9]{4}") // false
"34Az".matches("[a-zA-Z0-9]{4}") // true
// String.r:将一个字符串转换为 Regex 对象
val zPattern:Regex = "([a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9])".r
"L3R 6M2" match {
// zc为第1个分组的结果,可以匹配多个分组
case zPattern(zc) => println(s"Valid zip-code:$zc") // Valid zip-code:L3R 6M2
case zc => println(s"Invalid zip-code:$zc")
}
```
<br/>
**3. `scala.util.matching.Regex` 实现正则**
(1)返回匹配结果
```scala
def findFirstMatchIn(source: CharSequence): Option[Match]
返回第一个匹配。
def findAllMatchIn(source: CharSequence): Iterator[Match]
返回所有匹配结果。
def findAllIn(source: CharSequence) = new Regex.MatchIterator(source, this, groupNames)
返回所有匹配结果。
```
```scala
import scala.util.matching.Regex
object App{
def main(args: Array[String]): Unit = {
val numPattern:Regex = "[0-9]".r
var result = numPattern.findFirstMatchIn("awe43some9password")
println(result) // Some(4)
val stuPattern:Regex = "([0-9a-zA-Z-#() ]+):([0-9a-zA-Z-#() ]+)".r
val input = "name:Jason,age:19,weight:100"
for (patternMatch <- stuPattern.findAllMatchIn(input)) {
// 捕获分组
println(s"key: ${patternMatch.group(1)}, value:${patternMatch.group(2)}")
/*
key: name, value:Jason
key: age, value:19
key: weight, value:100
*/
}
val numPattern = "[0-9]+".r
var matchValue = numPattern.findAllIn("123 Main Street Suite 2012")
while(matchValue.hasNext) {
println(matchValue.next())
// 123
// 2012
}
}
}
```
(2)字符串替换
```scala
object App{
def main(args: Array[String]): Unit = {
val numPattern = "[0-9]".r
var matchValueFirst = numPattern.replaceFirstIn("234 main", "abc")
println(matchValueFirst) // abc34 main
var matchValueAll = numPattern.replaceAllIn("234 main 456", "abc ")
println(matchValueAll) // abc abc abc main abc abc abc
}
}
```
(3)在字符串中查找模式
```scala
object App{
def main(args: Array[String]): Unit = {
val date = """(\d\d\d\d)-(\d\d)-(\d\d)""".r
"2014-05-23" match {
case date(year, month, day) => println(year, month, day) // (2014,05,23)
}
"2014-05-23" match {
case date(year, _*) => println(year) // 2014
}
"2014-05-23" match {
case date(_*) => println("It is date") // It is date
}
}
}
```
- Scala是什么?
- Scala特性
- 开发环境搭建
- 环境搭建
- windows下的环境搭建
- IntelliJ IDEA环境搭建
- Scala关键字
- Hello, World
- 数据类型
- 数据类型
- 数据类型层次结构
- 字面量
- Null类型
- Nothing类型
- Unit类型
- 变量与常量
- type定义类型别名
- 字符串插值器
- 条件控制
- 循环控制
- 数组
- 元组
- 集合
- 集合分类
- List常用操作
- Set常用操作
- Map常用操作
- 函数
- 函数声明与调用
- 函数与方法的区别
- 函数注意事项
- 匿名函数
- 可变参数
- 高阶函数
- 中置表达式
- 函数嵌套
- 函数科里化
- 隐式参数
- 隐式函数
- 闭包
- 类和对象
- Java与Scala的比较
- 有关类与对象概念
- 类
- 类的定义和调用
- 类的继承
- 抽象类
- 单例对象
- 伴生对象和伴生类
- 特质
- 定义特质
- 混入特质
- 抽象类与特质的选择
- 自身类型
- 依赖注入
- this别名
- 样例类
- 枚举类
- 泛型类
- 包与包对象
- 模式匹配
- 基本语法
- 匹配模式
- 偏函数
- 注解
- 运算符
- 正则表达式
- 隐式类
- 异常处理
- 高级类型
- 结构类型
- 复合类型