Scalaでの正規表現のいくつかの使用法

Scalaでの
正規表現のいくつかの使用法正規表現は文字列の操作です。主な機能は、照合、切り取り、置換、抽出です。Scalaでの正規表現も頻繁に使用されるメソッドです(regex.rは正規表現であることを意味します)

1.マッチング
Scalaは、主に次の3つを含む、さまざまな正規表現解析をサポートしています。

  1. String.matches()メソッド
  2. 正規表現パターンマッチング
  3. scala.util.matching.Regex API

//String.matches


  val s = "!123"
   println(s.matches("![a-zA-z0-9]{3}"))//true
    println(s.matches("![a-zA-z0-9]{8}"))//false

//正規表現のパターンマッチング


val b = """([a-z0-9]+)"""".r
"helloworld123" match {
    case b => println("匹配成功")
    case _ => println("匹配失败")
}
//匹配成功

//scala.util.matching.Regex API

一致には次の3つのタイプがあります。

  1. findFirstMatchIn()は最初の一致を返します(Option [match])
  2. findAllMatchIn()はすべての一致を返します(regex.match)
  3. findAllIn()は、一致するすべての結果(文字列)を返します
val reg ="[a-zA-Z0-9]+:[a-zA-Z0-9]+".r
val str = "name:zs,age:17"

//第一种:findFirstMatchIn()返回第一个匹配(Option[match])
 reg.findFirstMatchIn(str) match {
      case Some(x) => println(x)
      case None => println("no")
    }//name:zs
    
//第二种findAllMatchIn()返回所有匹配(regex.match)
println(reg.findAllMatchIn(str).toList)//List(name:zs, age:17)
    
//第三种findAllIn()返回所有匹配结果(String)
println(reg.findAllIn(str).mkString(","))//name:zs,age:17

2.グループを抽出します

val reg ="([a-zA-Z0-9]+):([a-zA-Z0-9]+)".r
val str = "name:zs,age:17"	
reg.findAllMatchIn(str).foreach(x=>println(x.group(1)))
//    name
//    age


//实用性 例如某一日志文件内容如:INFO 2000-01-07 requestURI:/c?app=0&p=1 路径为path 对其进行解析import scala.io.Source
val source = Source.fromFile("path","UTF-8")
val lines = source.getLines.toArray
val reg = """([A-Z]+) ([0-9]{4}-[0-9]{2}-[0-9]{1,2}) requestURI:(.*)""".r
//方法1
lines.map(line => reg.findAllMatchIn(line).toList.map(x => (x.group(1),x.group(2),x.group(3)))).foreach(println)
//List((INFO,2020-01-07,/c?app=0&p=1))
//方法2
lines.map(line => line match{case reg(le,ld,ad) => (le,ld,ad)})
// Array[(String)] = Array((INFO,2000-01-07,/c?app=0&p=1))
//必须逐一匹配上,不然会报错

3.交換します

//replaceFirstIn
val a = """([0-9]+)""".r
a.replaceFirstIn("123,hello! world","run")
// run,hello! world

//replaceAllIn
val a = """([0-9]+)""".r
a.replaceAllIn("123 hello world!","come on!")
//come on! hello world

4.検索


val date = """([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})""".r
"2020-5-18" match {case date(year, _*) => println((year))}
//2020
"2020-5-18" match {case date(_,mon,_*) => println(mon)}
//5

おすすめ

転載: blog.csdn.net/weixin_44695793/article/details/108675749