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) } }
執(zhí)行以上代碼,輸出結果為:
$ 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(",")) // 使用逗號 , 連接返回結果 } }
執(zhí)行以上代碼,輸出結果為:
$ 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")) } }
執(zhí)行以上代碼,輸出結果為:
$ scalac Test.scala $ scala Test Java is scalable and cool
正則表達式
Scala 的正則表達式繼承了 Java 的語法規(guī)則,Java 則大部分使用了 Perl 語言的規(guī)則。
下表我們給出了常用的一些正則表達式規(guī)則:
表達式 | 匹配規(guī)則 |
---|---|
^ | 匹配輸入字符串開始的位置。 |
$ | 匹配輸入字符串結尾的位置。 |
. | 匹配除"\r\n"之外的任何單個字符。 |
[...] | 字符集。匹配包含的任一字符。例如,"[abc]"匹配"plain"中的"a"。 |
[^...] | 反向字符集。匹配未包含的任何字符。例如,"[^abc]"匹配"plain"中"p","l","i","n"。 |
\\A | 匹配輸入字符串開始的位置(無多行支持) |
\\z | 字符串結尾(類似$,但不受處理多行選項的影響) |
\\Z | 字符串結尾或行尾(不受處理多行選項的影響) |
re* | 重復零次或更多次 |
re+ | 重復一次或更多次 |
re? | 重復零次或一次 |
re{ n} | 重復n次 |
re{ n,} |
更多建議: