今天在项目中用到了Scala正则表达式,网上找了好久也没找到很全的资料,这里收集了Scala中很多常用的正则表达式使用方法。
1
scala> val regex="""([0-9]+) ([a-z]+)""".r
2
regex: scala.util.matching.Regex = ([0-9]+) ([a-z]+)
3
4
scala> val line = "123 iteblog"
5
line: String = 123 iteblog
6
7
scala> val regex(num, blog) = line
8
num: String = 123
9
blog: String = iteblog
这里将匹配出来的结果复制给num和blog变量。在构造Regex的时候使用到String类的r方法,我们也可以直接使用Regex类进行:
01
/**
02
* User: 过往记忆
03
* Date: 15-01-04
04
* Time: 上午10:16
05
* bolg: http://www.iteblog.com
06
* 本文地址:http://www.iteblog.com/archives/1245
07
* 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货
08
* 过往记忆博客微信公共帐号:iteblog_hadoop
09
*/
10
11
scala> import scala.util.matching._
12
import scala.util.matching._
13
14
scala> val regex = new Regex("""([0-9]+) ([a-z]+)""")
15
regex: scala.util.matching.Regex = ([0-9]+) ([a-z]+)
16
17
scala> val regex(num, blog) = line
18
num: String = 123
19
blog: String = iteblog
输出的结果和上面一样,其实第一种方法更简洁。我们还可以在case中使用正则:
1
scala> line match{
2
| case regex(num, blog) => println(num + "\t" + blog)
3
| case _ => println("ohh...")
4
| }
5
123 iteblog
如果没有匹配到,则输出ohh。我们还可以使用Regex类的findAllIn 、findAllMatchIn、findFirstIn、findFirstMatchIn、findPrefixMatchOf和findPrefixOf方法:
01
scala> val m = regex.findAllIn(line)
02
m: scala.util.matching.Regex.MatchIterator = non-empty iterator
03
04
scala> println(m.group(1) + "\t" + m.group(2))
05
123 wyp
06
07
scala> m.toArray
08
res13: Array[String] = Array(123 wyp, 456 iteblog)
09
10
scala> for(regex(num, blog) <- regex.findAllIn(line))
11
| println(num + "\t" + blog)
12
123 wyp
13
456 iteblog
findAllIn方法找到line中所有符合正则的字符串,可以通过toArray方法来将匹配到的结果存放到Array中。也可以方法哦for循环中,遍历出符合条件的匹配。findFirstIn只匹配第一个符合正则的字符串就停止了:
1
scala> val m = regex.findFirstIn(line)
2
m: Option[String] = Some(123 wyp)
其他函数这里就不一一介绍了,大家可以 自己动手试试。