正则表达式是一种针对于字符串的操作,主要功能有匹配、切割、替换和获取的作用,在Scala中正则也是被频繁使用的方法(regex.r表示为正则表达式)
正则表达式(Regular Expression)是一种用于匹配.查找和替换文本中特定的字符串。
创建正则表达式对象
在 Scala 中,可以使用java.util.regex.Pattern
类来创建正则表达式对象
import java.util.regex.Pattern
val pattern = Pattern.compile("abc")
使用Matcher
进行匹配操作
接着,可以使用Matcher
类来对字符串进行匹配操作。
import java.util.regex.Matcher
val matcher = pattern.matcher("abcdef")
val isMatch = matcher.find()
println(isMatch)
Scala 特有的正则表达式操作方式
使用r
方法
Scala 提供了一种更简洁的方式来处理正则表达式。可以使用字符串的r
方法将字符串转换为正则表达式。
val regex = "abc".r
val str = "abcdef"
val isMatch = regex.findFirstIn(str).isDefined
println(isMatch)
提取匹配的组
当正则表达式中有分组时,可以方便地提取匹配的组。
在 Scala 中使用正则表达式进行替换操作
使用replaceAll
和replaceFirst
Scala 的String
类提供了replaceAll
和replaceFirst
方法,可以方便地进行正则表达式替换操作。
val originalString = "abc123abc456"
val replacedString = originalString.replaceAll("abc", "XYZ")
println(replacedString)
能匹配很多规则的字符 方括号[]
用于定义字符类。方括号[]
在正则表达式中用于定义字符集,匹配方括号内的任意一个字符。 在 Scala 正则表达式中,排除字符类是一种特殊的字符类定义方式,用于匹配除了字符类中指定字符之外的其他字符。它通过在方括号[]
的开头添加^
符号来表示。 1. .表示,除了换行之外的其他的任意单个字符 2. \d等于[0-9]匹配一个数字 digit 3 \D 除了\d之外的其他的热门一字符。表示非数字 4.\w等价于[0-9A-Za-z_]63个字符,表示一个字word 5.\W除了\w之外任意的字符。表示非字 6.\s表示一个空格 space 7.\S表示一个非空格
package test36
object test {
def main(args: Array[String]): Unit = {
//定义一个规则,正则表达式
// val reg ="[a-zA-Z0-9]".r
// val reg ="^a$".r
// val reg ="[^ab]".r //放在[]前面是排除
//1. .表示,除了换行之外的其他的任意单个字符
//2. \d等于[0-9]匹配一个数字 digit
//3 \D 除了\d之外的其他的热门一字符。表示非数字
//4.\w等价于[0-9A-Za-z_]63个字符,表示一个字word
//5.\W除了\w之外任意的字符。表示非字
//6.\s表示一个空格 space
// 7.\S表示一个非空格
//val reg = ".".r
val reg = "\\S".r
//1.查找。在目标字符串中,找到符合正则表达式规则要求的 字串
// val rs = reg.findFirstIn("abc")
// if(!rs.isEmpty){
// println("你找到的,符合正则表达式规则要求的内容是:",rs.get)
// }
reg.findAllIn("_Ai 1234am a12 no,y3es,ok").toList.foreach(println)
}
}
Scala正则表达式的量词
1.{n,m}把前面的字符匹配最少n次,最多m次
2.{n, }把前面的字符匹配最少n次,最多不限
3.{n}把前面的字符匹配最少n次
4. ? ===>{0,1} 把前面的字符匹配0次,或者1次
5. ? ===>{1 } 把前面的字符匹配最少1次
6. ? ===>{0, } 把前面的字符匹配0次,或者多次
package test36
object test0 {
def main(args: Array[String]): Unit = {
//规则1.有11个数字
//规则2.开头是1
//规则3.第二位是3-9数字
var reg = "1[3-9]\\d{9}".r
reg.findAllIn("1234567890 13a12335678 13812345678 and 10987654321 are phone numbers").toList.foreach(println)
}
}