scala正則表達式


 

   正則表達式    

     Scala 通過 scala.util.matching 包種的 Regex 類來支持正則表達式

     scala.util.matching.Regex.構造一個Regex對象,用String類的r方法:

     val numPattern = “[0-9]+”.r

     如果正則表達式包含反斜杠或引號的話,最好使用“原始”字符串語法”””…”””,例如:

     val wsnumwsPattern = “””\s+[0-9]+\s+”””.r

     findAllIn方法返回遍歷所有匹配項的迭代器。可以在for循環中使用它:

     for( matching <- numPattern.findAllIn(“99 bottles,98 bottles”))

     處理 matchString或者將迭代器轉成數組:

     val matches = numPattern.findAllIn(“99 bottles,98 bottles”))  //Array(99,98)

     要找到字符串中的首個匹配項,可使用findFirstIn,得到Option[String].

     val m1 = wsnumwsPattern.findFirstIn(“99 bottles,98 bottles”))   //Some(“98”)

     檢查是否某個字符串的開始部分能匹配,可用findPrefixOf,可以替換首個匹配項或全部替換,使用replaceFirstIn,replaceAllIn.

正則表達式組

     val numitemPattern = “([0-9]+) ([a-z]+)”.r

     val numitemPattern(num,item) = “99 bottles”//將num設為99,item設為bottles

     從多個匹配項中提取分組內容: 

     for(numitemPattern(num,item) <- numitemPattern.findAllIn(“99 bottles,98 bottles”))

     Scala 的正則表達式繼承了 Java 的語法規則,Java 則大部分使用了 Perl 語言的規則。

     下表我們給出了常用的一些正則表達式規則:

 

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM