27人参与 • 2026-02-28 • 正则表达式
scala.util.matching.regex类来表示。可以通过r方法将一个字符串字面量转换为正则表达式。例如,val pattern = "abc".r,这里pattern就是一个正则表达式对象,它可以用于匹配包含abc的字符串。\)时,需要进行转义。例如,如果要匹配一个反斜杠字符,在正则表达式中应该写成"\\",在 scala 代码中创建正则表达式对象时就应该是val backslashpattern = "\\\\".r。这是因为在 scala 字符串中,一个反斜杠本身需要用另一个反斜杠来转义,然后在正则表达式中,反斜杠也有特殊用途(比如用于表示字符类等),所以总共需要两个反斜杠。[]来定义字符类。例如,[abc]可以匹配字符a、b或者c。在 scala 中,val charclasspattern = "[abc]".r可以用来创建匹配a、b或c的正则表达式对象。[a - z]来匹配小写字母a到z之间的所有字符。在 scala 代码中可以写成val lowercasepattern = "[a - z]".r。^来实现。例如,[^abc]将匹配除了a、b和c之外的任何字符。对应的 scala 代码是val notabcpattern = "[^abc]".r。*量词表示匹配前面的元素零次或多次。例如,a*可以匹配空字符串、a、aa、aaa等。在 scala 中,val starpattern = "a*".r可以用来匹配包含零个或多个a的字符串。+量词表示匹配前面的元素一次或多次。比如a+将匹配a、aa、aaa等,但不匹配空字符串。scala 代码可以写成val pluspattern = "a+".r。?量词表示匹配前面的元素零次或一次。例如a?可以匹配空字符串或者a。在 scala 中是val questionmarkpattern = "a?".r。{n}来指定前面元素的精确匹配次数,其中n是一个整数。例如,a{3}将匹配aaa。scala 代码为val exactcountpattern = "a{3}".r。{n,}表示匹配前面的元素至少n次。例如,a{2,}将匹配aa、aaa、aaaa等。在 scala 中可以写成val atleastcountpattern = "a{2,}".r。{n,m}表示匹配前面的元素至少n次但不超过m次。例如,a{1,3}将匹配a、aa、aaa。对应的 scala 代码是val rangecountpattern = "a{1,3}".r。()来进行分组。分组可以用于提取匹配的子串,也可以用于应用量词到一组字符上。例如,(ab)+将匹配ab、abab、ababab等。在 scala 中,val grouppattern = "(ab)+".r可以用来创建这样的正则表达式对象。match语句或者findfirstmatchin等方法来获取匹配的组。^用于匹配字符串的开头。例如,^abc将只匹配以abc开头的字符串。在 scala 中,val startpattern = "^abc".r可以用于此目的。$用于匹配字符串的结尾。例如,abc$将只匹配以abc结尾的字符串。scala 代码可以是val endpattern = "abc$".r。\b用于匹配单词边界。单词边界是指单词字符(字母、数字、下划线)和非单词字符之间的位置。例如,\babc\b将匹配独立的abc单词,而不是作为其他单词一部分的abc。在 scala 中,val wordboundarypattern = "\\babc\\b".r可以用来匹配这样的边界情况。^(在字符类外表示字符串开头)、$(表示字符串结尾)、*(量词)等。如果要匹配这些字符本身,需要进行转义。在 scala 中,转义字符也是反斜杠\。例如,要匹配一个*字符,正则表达式应该是\*,在 scala 代码中创建正则表达式对象时就是val asteriskpattern = "\\*".r。match语句中直接使用正则表达式来匹配字符串。package test37
//任务:把字符串中的手机号打码:类似:138****5678
object test2 {
def main(args: array[string]): unit = {
var str= "张先生,手机号:13812345678 你买的 xxx 到了"
//开始你的代码
// val reg = "1[3-9\\d{9}]".r
//()是分组,不会影响正则表达式的查询结果,但是,他会把分组找到的内容单独保存在group中
val reg = "(1[3-9]\\d)(\\d{4})(\\d{4})".r
//reg.replaceallin的功能:在目标字符串str中,用正则表达式reg去查找,找到之后,用箭头函数的返回值
//来替换
//m就是正则表达式找到的内容
//如果正则表达式中有(),则可以通过m.group来找到对应的分组
val newstr = reg.replaceallin(str,(m)=>{
println(s"第一组:${m.group(1)}")
println(s"第二组:${m.group(2)}")
println(s"第三组:${m.group(3)}")
println("-"*48)
m.group(1)+"****"+m.group(3)
})
println(newstr)
//“张先生,手机号:13812345678 你买的 xxx 到了”
//var str = "张先生,id:429005200001231156"
//var str = "张先生,id:4290052000------56"
}
}
到此这篇关于scala正则表达式的特殊规则的文章就介绍到这了,更多相关scala正则表达式特殊规则内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论