精品熟女碰碰人人a久久,多姿,欧美欧美a v日韩中文字幕,日本福利片秋霞国产午夜,欧美成人禁片在线观看

Scala 正則表達式

scala 正則表達式

scala 通過 scala.util.matching 包中的 regex 類來支持正則表達式。以下范例演示了使用正則表達式查找單詞 scala :

import scala.util.matching.regex

object test {
? ?def main(args: array[string]) {
? ? ? val pattern = "scala".r
? ? ? val str = "scala is scalable and cool"
? ? ? 
? ? ? println(pattern findfirstin str)
? ?}
}

執行以上代碼,輸出結果為:

$ scalac test.scala 
$ scala test
some(scala)

范例中使用 string 類的 r() 方法構造了一個regex對象。

然后使用 findfirstin 方法找到首個匹配項。

如果需要查看所有的匹配項可以使用 findallin 方法。

你可以使用 mkstring( ) 方法來連接正則表達式匹配結果的字符串,并可以使用管道(|)來設置不同的模式:

import scala.util.matching.regex

object test {
? ?def main(args: array[string]) {
? ? ? val pattern = new regex("(s|s)cala") ?// 首字母可以是大寫 s 或小寫 s
? ? ? val str = "scala is scalable and cool"
? ? ? 
? ? ? println((pattern findallin str).mkstring(",")) ? // 使用逗號 , 連接返回結果
? ?}
}

執行以上代碼,輸出結果為:

$ scalac test.scala 
$ scala test
scala,scala

如果你需要將匹配的文本替換為指定的關鍵詞,可以使用 replacefirstin( ) 方法來替換第一個匹配項,使用 replaceallin( ) 方法替換所有匹配項,范例如下:

object test {
? ?def main(args: array[string]) {
? ? ? val pattern = "(s|s)cala".r
? ? ? val str = "scala is scalable and cool"
? ? ? 
? ? ? println(pattern replacefirstin(str, "java"))
? ?}
}

執行以上代碼,輸出結果為:

$ scalac test.scala 
$ scala test
java is scalable and cool

 

1. 正則表達式

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"。

 

. 正則表達式范例

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

注意上表中的每個字符使用了兩個反斜線。這是因為在 java 和 scala 中字符串中的反斜線是轉義字符。所以如果你要輸出 \,你需要在字符串中寫成 \\ 來獲取一個反斜線。查看以下范例:

import scala.util.matching.regex

object test {
? ?def main(args: array[string]) {
? ? ? val pattern = new regex("abl[ae]\\d+")
? ? ? val str = "ablaw is able1 and cool"
? ? ? 
? ? ? println((pattern findallin str).mkstring(","))
? ?}
}

執行以上代碼,輸出結果為:

$ scalac test.scala 
$ scala test
able1

下一節:scala 異常處理

scala 教程

相關文章