**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別名
- 樣例類
- 枚舉類
- 泛型類
- 包與包對象
- 模式匹配
- 基本語法
- 匹配模式
- 偏函數
- 注解
- 運算符
- 正則表達式
- 隱式類
- 異常處理
- 高級類型
- 結構類型
- 復合類型