Java之正则表达式和String正则Api(完结)
对正则表达式的学习,千万不要死记硬背,只需要达到查看匹配规则表可以看懂别人的正则表达式、能写出需求的正则表达式即可
1. 正则表达式的匹配规则
规则的种类:字符、字符类、预定义字符类、边界匹配器、数量词
直接引用别人的博文查询匹配规则:
https://www.cnblogs.com/SQP51312/p/6121744.html
字符相关规则 边界匹配器 数量词 其他2. 正则练习
2.1 练习一
写出满足如下匹配规则的字符串:"[0-9]{6,12}"
解读:匹配6~12位的数字字符串
"234234"->true
"42734"->false
"244424236801" ->true
"2444242368011" ->false
2.2 练习二
写出满足如下匹配规则的字符串:"1[34578][0-9]{9}"
解读:匹配11位的手机号码,第一位是1,第二位是34578其中一个,之后是9位任意数字
"15828618018"->true
"16828618018"->false
"1582861801"->false
"158286180188"->false
2.3 练习三
写出满足如下匹配规则的字符串:"a*b"
解读:0个或多个a开始,以b结束的字符串
"b"->true
"ab"->true
"aaaaaaaaaaaaaab"->true
"bb"->false
"bab"->false
"ba"->false
"cb"->false
3. String类中三个正则表达式方法
3.1 字符串匹配:boolean matches(String regexStr)
3.1.1 检查QQ号码是否合法
解读不能以0开头,全数字,位数最少5位最多10位
可以使用易懂的[0-9],也可以使用转义的[\\d],注意这里是两个\, 第一个\将第二个\转成普通\
public static void checkQQ(String testStr, String regexStr) {
boolean ret = testStr.matches(regexStr);
System.out.println(ret);
}
3.1.2 检查手机号码是否合法
解读:1开头,第二位是34578其中一个,总位数是11位
3.1完整代码public static void checkPhone(String testStr, String regexStr) {
boolean ret = testStr.matches(regexStr);
System.out.println(ret);
}
3.2 字符串切割:String[] splite(String regexStr)
3.2.1 将字符串根据单个字符来切分
解读:正则应该只是单个字符即可regexStr = "@";
public static void splitTest(String testStr, String regexStr) {
String[] retStr = testStr.split(regexStr);
for(String str:retStr) {
System.out.println(str);
}
}
3.2.2 将字符串按照空格切割,空格可能为一个或多个
解读:正则应该为" +"
3.2.3 切割ip地址
解读:正则应该为"\\.",因为一个"."表示任意字符,必须进行转义
3.2完整代码3.3 字符串替换:String replaceAll(String regexStr, String replaceStr)
将数字替换为#,正则为"[\\d]+" 则连着的数字用一个#表示;"[\\d]"则每一个数字都用#替换
3.3示例代码public static void replaceTest(String testStr, String regexStr) {
String retStr = testStr.replaceAll(regexStr, "#");
System.out.println(retStr);
}
4 正则高阶练习
4.1 匹配正确的数字
4.2 匹配合法邮箱地址
解读:@前面:数字、字母、_个数不能少于1个
@后面:数字、字母,个数不能少于1个
.后面:字母
“qq.com”、“www.qq.com”、“mp.weixin.qq.com”、“12-34.com.cn”,分析可得域名类似“*@*.*”组成
第一部分: [a-zA-Z_0-9]+
第二部分:@
第三部分:[a-zA-Z0-9]
第四部分:(\\.[a-zA-Z]+)+
最后结果:[a-zA-Z_0-9]+@[a-zA-Z0-9](\\.[a-zA-Z]+)+