(一)、matchs方法
正则表达式对象有matches方法,它的作用是验证给定的字符串是否满足正则表达式的要求。它的格式如下:
val 结果 = 正则.matches(目标字符串)
其中的结果是一个bool值。
(二)、案例验证合法用户名
背景:你开发了一个论坛注册程序,允许用户去注册账号。但是对于用户输入的用户名需要遵循一定的规则。具体的规则如下:
规则1:合法用户名通常允许包含大小写字母(a-z、A-Z)、数字(0-9)以及下划线(_)
规则2:用户名长度一般限定在 6 到 12 位之间
规则3:不能以数字开头。
当然,你也可以补充你自己的规则,或者对这个规则进行调整和修改。
需求:如何写代码才能确保用户输入的内容符合要求?
正则表达式编写:^[a-zA-Z][a-zA-Z0-9_]{5,11}$
详细解读:
[a-zA-Z]:明确限定用户名的首字符只能是大小写字母中的任一个,筛选掉不符合开头规范的情况。
[a-zA-Z0-9_]{5,11}:表示后续字符可以是大小写字母、数字、下划线,且总长度要在 5 到 11位之间(加上开头的 1 个字母,整体用户名长度就在 6 到 12 位),以此保证用户名有合适的长度且字符构成合规。这里使用花括号限定重复次数范围,确保长度约束生效。
(三)、replaceAllin正则替换
功能:对目标字符中的内容,进行正则查找,对找到的内容使用指定的内容进行替换,并返回替换之后的字符串。
格式:正则.replaceAll(目标字符串, 匹配到的内容 => 要替换的内容 )
来,我们看一个简单的例子:把目标字符串中的字符BC换成01。
(四)案例-手机号打码
任务:把手机号的中间4-7位打马赛克,再输出。
用到的方法是:正则匹配分组 + replaceAllIn。
import java.io.FileWriter
object reg04 {
def main(args: Array[String]): Unit = {
//1.从根目录下读出address.txt的内容
val content = scala.io.Source.fromFile("address.txt").mkString
println("读到的文件内容如下:")
println(content)
//2.找到其中的合法手机号,把中间4位(3-4-4)用*代替
//val reg = "1[356789]\d{9}".r
val reg = "(1[356789]\d\d)(\d{4})(\d{3})".r
// println("找到的合法手机号如下:")
// reg.findAllIn(content).foreach(ele=>println(ele))
//在content中,把所有通过正则找到的内容,换成"abc"
val newContent = reg.replaceAllIn(content,ele =>{
println(ele.group(0))
println(ele.group(1))
println(ele.group(2))
println(ele.group(3))
//val phone = ele.toString()
//println(ele.toString())
//"手机号前3位"+"****"+"手机号后4位"
// phone.substring(0,3)+"****"+phone.substring(7)
ele.group(1)+"-****-"+ele.group(3)
})
println("替换后的内容如下:")
println(newContent)
//3.把替换之后的内容写入到address_new.txt文件中
val fileWriter = new FileWriter("address_new.txt")
fileWriter.write(newContent)
fileWriter.close()
}
}