本章介紹了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正規表示式: /20/206/8029.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