鍍金池/ 教程/ Scala/ Scala正則表達(dá)式
Scala方法重載
Scala模式匹配
Scala throw關(guān)鍵字
Scala提取器
Scala概述
Scala throws關(guān)鍵字
Scala finally塊
Scala正則表達(dá)式
Scala循環(huán)語句
Scala多線程
Scala函數(shù)
Scala final關(guān)鍵字
Scala方法覆蓋
Scala字符串
Scala線程實(shí)現(xiàn)
Scala異常處理
Scala類和對象
Scala數(shù)據(jù)類型
Scala單例和伴生對象
Scala構(gòu)造函數(shù)
Scala教程
Scala Case類和對象
Scala繼承
Scala開發(fā)環(huán)境安裝配置
Scala運(yùn)算符
Scala文件I/O
Scala線程方法
Scala變量
Scala try-catch語句
Scala基礎(chǔ)語法
Scala集合
Scala數(shù)組
Scala閉包
Scala訪問修辭符
Scala this關(guān)鍵字

Scala正則表達(dá)式

本章介紹了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

形成正則表達(dá)式

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