本章介紹了Scala如何通過在scala.util.matching
包中提供的Regex
類支持和實(shí)現(xiàn)正則表達(dá)式。
嘗試以下示例程序,將嘗試從語句中查找單詞: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中,使用以下命令編譯和執(zhí)行此程序。
D:\>scalac Demo.scala
D:\>scala Demo
Some(Scala)
我們創(chuàng)建一個(gè)String并在其上調(diào)用r()
方法。 Scala會將String
轉(zhuǎn)換為RichString
,并調(diào)用該方法獲取Regex
實(shí)例。 要找到正則表達(dá)式的第一個(gè)匹配項(xiàng),只需調(diào)用findFirstIn()
方法即可。如果希望找到匹配詞的所有出現(xiàn),可以使用findAllIn()
方法,如果目標(biāo)字符串中有多個(gè)Scala
字符,則將返回所有匹配的字符串的集合。
可以使用mkString()
方法來連接結(jié)果列表,可以使用管道(|
)來搜索大小寫的字符串:Scala
,可以使用Regex
構(gòu)造函數(shù)或r()
方法來創(chuàng)建模式。
嘗試以下示例程序 -
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中,使用以下命令編譯和執(zhí)行此程序。
D:\>scalac Demo.scala
D:\>scala Demo
Scala,scala
如果要替換匹配的文本,可以使用replaceFirstIn()
替換第一個(gè)匹配或replaceAllIn()
來替換所有出現(xiàn)的值。
示例
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中,使用以下命令編譯和執(zhí)行此程序。
D:\>scalac Demo.scala
D:\>scala Demo
Java is scalable and cool
Scala從Java繼承其正則表達(dá)式語法,后者繼承了Perl的大部分功能。可參考Java正則表達(dá)式: http://www.yiibai.com/java/java_regular_expressions.html
注意 - 每個(gè)反斜杠在上面的字符串中出現(xiàn)兩次。 這是因?yàn)樵贘ava和Scala中,單個(gè)反斜杠是字符串文字中的轉(zhuǎn)義字符,而不是字符串中顯示的常規(guī)字符。 所以,反斜杠不是'\'
,需要寫'\\'
來獲取字符串中的單個(gè)反斜杠。
嘗試以下示例程序 -
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中,使用以下命令編譯和執(zhí)行此程序。
D:\>scalac Demo.scala
D:\>scala Demo
able1