Scala編程基礎(chǔ)26:Scala正則表達(dá)式

Scala通過scala.util.matching包中的Regex類來支持正則表達(dá)式。

1.查找首個匹配項

以下實例演示了使用正則表達(dá)式查找單詞Scala:

import scala.util.matching.Regex
object Test1{
    def main(args:Array[String]){
        val pattern="Scala".r;
        val str="Scala is Scalable and cool";
        println(pattern findFirstIn str);
    }
}

編譯并執(zhí)行以上代碼,輸出結(jié)果如下:

E:\Test>scalac Test1.scala
E:\Test>scala Test1
Some(Scala)

實例中使用String類的r()方法夠早了一個Regex對象。然后使用findFirstIn方法找到第一個匹配項。

2.查找所有匹配項

如果需要查找所有的匹配項,可以使用findAllIn方法。你可以使用mkString()方法來連接正則表達(dá)式匹配結(jié)果的字符串,并可以使用管道符”|”(表示或)來設(shè)置不同的模式:

import scala.util.matching.Regex
object Test2{
    def main(args:Array[String]){
        val pattern = new Regex("(S|s)cala");
        val str = "Scala is scalable and cool";
        println((pattern findAllIn str).mkString(","));
    }
}

編譯并執(zhí)行上述代碼,輸出結(jié)果如下:

E:\Test>scalac Test2.scala
E:\Test>scala Test2
Scala,scala

3.替換匹配項

如果需要將匹配到的文本替換為指定的關(guān)鍵詞,可以使用replaceFirstIn()來替換匹配到的第一個匹配項,同理可以使用replaceAllIn()方法替換所有匹配項:

import scala.util.matching.Regex
object Test3{
    def main(args:Array[String]){
        val pattern = "(S|s)cala".r;
        val str = "Scala is scalable and cool";
        println(pattern replaceFirstIn(str,"Java"));
        println(pattern replaceAllIn(str,"Java"));
    }
}

編譯并執(zhí)行以上代碼,輸出結(jié)果如下:

E:\Test>scalac Test3.scala
E:\Test>scala Test3
Java is scalable and cool
Java is Javable and cool

4.正則表達(dá)式規(guī)則

下面列出了常用的正則表達(dá)式規(guī)則:

表達(dá)式 匹配規(guī)則
^ 匹配輸入字符串開始的位置。
$ 匹配輸入字符串結(jié)尾的位置。
. 匹配除”\r\n”之外的任何單個字符。
[…] 字符集。匹配包含的任一字符。例如,”[abc]”匹配”plain”中的”a”。
[^…] 反向字符集。匹配未包含的任何字符。例如,”[^abc]”匹配”plain”中”p”,”l”,”i”,”n”。
\\A 匹配輸入字符串開始的位置(無多行支持)
\\z 字符串結(jié)尾(類似$,但不受處理多行選項的影響)
\\Z 字符串結(jié)尾或行尾(不受處理多行選項的影響)
re* 重復(fù)零次或更多次
re+ 重復(fù)一次或更多次
re? 重復(fù)零次或一次
re{ n} 重復(fù)n次
re{ n,} 至少重復(fù)n次
re{ n, m} 重復(fù)n到m次
a|b 匹配 a 或者 b
>(re) 匹配 re,并捕獲文本到自動命名的組里
(?: re) 匹配 re,不捕獲匹配的文本,也不給此分組分配組號
(?> re) 貪婪子表達(dá)式
\\w 匹配字母或數(shù)字或下劃線或漢字
\\W 匹配任意不是字母,數(shù)字,下劃線,漢字的字符
\\s 匹配任意的空白符,相等于 [\t\n\r\f]
\\S 匹配任意不是空白符的字符
\\d 匹配數(shù)字,類似 [0-9]
\\D 匹配任意非數(shù)字的字符
\\G 當(dāng)前搜索的開頭
\\n 換行符
\\b 通常是單詞分界位置,但如果在字符類里使用代表退格
\\B 匹配不是單詞開頭或結(jié)束的位置
\\t 制表符
\\Q 開始引號:\\Q(a+b)*3\\E 可匹配文本 “(a+b)*3″。
\\E 結(jié)束引號:\\Q(a+b)*3\\E 可匹配文本 “(a+b)*3″。

5.正則表達(dá)式實例

下面列出了一些常用的正則表達(dá)式實例:

實例 描述
. 匹配除”\r\n”之外的任何單個字符。
[Rr]uby 匹配 “Ruby” 或 “ruby”
rub[ye] 匹配 “ruby” 或 “rube”
[aeiou] 匹配小寫字母 :aeiou
[0-9] 匹配任何數(shù)字,類似 [0123456789]
[a-z] 匹配任何 ASCII 小寫字母
[A-Z] 匹配任何 ASCII 大寫字母
[a-zA-Z0-9] 匹配數(shù)字,大小寫字母
[^aeiou] 匹配除了 aeiou 其他字符
[^0-9] 匹配除了數(shù)字的其他字符
\\d 匹配數(shù)字,類似: [0-9]
\\D 匹配非數(shù)字,類似: [^0-9]
\\s 匹配空格,類似: [ \t\r\n\f]
\\S 匹配非空格,類似: [^ \t\r\n\f]
\\w 匹配字母,數(shù)字,下劃線,類似: [A-Za-z0-9_]
\\W 匹配非字母,數(shù)字,下劃線,類似: [^A-Za-z0-9_]
ruby? 匹配 “rub” 或 “ruby”: y 是可選的
ruby* 匹配 “rub” 加上 0 個或多個的 y。
ruby+ 匹配 “rub” 加上 1 個或多個的 y。
\\d{3} 剛好匹配 3 個數(shù)字。
\\d{3,} 匹配 3 個或多個數(shù)字。
\\d{3,5} 匹配 3 個、4 個或 5 個數(shù)字。
\\D\\d+ 無分組: + 重復(fù) \d
(\\D\\d)+/ 分組: + 重復(fù) \D\d 對
([Rr]uby(, )?)+ 匹配 “Ruby”、”Ruby, ruby, ruby”,等等

注意:上述正則表達(dá)式中的”\\”表示一個反斜線”\”字符,這是因為Scala中一個反斜線表示轉(zhuǎn)義字符。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 搞懂Python 正則表達(dá)式用法 Python 正則表達(dá)式 正則表達(dá)式是一個特殊的字符序列,它能幫助你方便的檢查一...
    廈熱閱讀 1,776評論 0 2
  • re模塊手冊 本模塊提供了和Perl里的正則表達(dá)式類似的功能,不關(guān)是正則表達(dá)式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 4,198評論 0 13
  • 一、正則表達(dá)式語法 正則表達(dá)式是用匹配或者描述字符串的工具。 用處:a.判斷字符串是否滿足某個條件---判斷輸入的...
    大漠判官1閱讀 469評論 0 1
  • python:正則表達(dá)式 什么是正則表達(dá)式 正則表達(dá)式也叫做匹配模式(Pattern),它由一組具有特定含義的字符...
    清清子衿木子水心閱讀 575評論 0 2
  • (二) 晶姑娘回到宿舍,手心的余溫還未褪去。她想給遠(yuǎn)方的閨蜜打個電話商量對策,卻怎么也拿不出卡在口袋里的手機(jī)。 舍...
    毛毛錦閱讀 259評論 0 0

友情鏈接更多精彩內(nèi)容