Scala正则表达式

本章介绍了Scala如何通过在scala.util.matching包中提供的Regex类支持和实现正则表达式。

尝试以下示例程序,将尝试从语句中查找单词: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中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
Some(Scala)

我们创建一个String并在其上调用r()方法。 Scala会将String转换为RichString,并调用该方法获取Regex实例。 要找到正则表达式的第一个匹配项,只需调用findFirstIn()方法即可。如果希望找到匹配词的所有出现,可以使用findAllIn()方法,如果目标字符串中有多个Scala字符,则将返回所有匹配的字符串的集合。

可以使用mkString()方法来连接结果列表,可以使用管道(|)来搜索大小写的字符串:Scala,可以使用Regex构造函数或r()方法来创建模式。

尝试以下示例程序 -

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中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
Scala,scala

如果要替换匹配的文本,可以使用replaceFirstIn()替换第一个匹配或replaceAllIn()来替换所有出现的值。

示例

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中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
Java is scalable and cool

形成正则表达式

Scala从Java继承其正则表达式语法,后者继承了Perl的大部分功能。可参考Java正则表达式: http://www.zyiz.net/java/java_regular_expressions.html

注意 - 每个反斜杠在上面的字符串中出现两次。 这是因为在Java和Scala中,单个反斜杠是字符串文字中的转义字符,而不是字符串中显示的常规字符。 所以,反斜杠不是'\',需要写'\\'来获取字符串中的单个反斜杠。

尝试以下示例程序 -

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中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
able1

上一篇:Scala模式匹配

下一篇:Scala异常处理

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程