Scala正则表达式


  今天在项目中用到了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)

  其他函数这里就不一一介绍了,大家可以 自己动手试试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值