------- http://www.itheima.com" target="blank">android培训http://www.itheima.com"target="blank">java培训、期待与您交流!
一.正则表达式基础概述:
1.字符类:
1).[aeiou]
2).[^aeiou]
3).[a-z]
4).[a-zA-Z0-9]
2.逻辑运算符:
1).&&:与
).|:或
3.预定义字符类:
1).".":任何字符
2)."\d":任何数字,[0-9]的简写形式;
3)."\D":任何非数字,[^0-9]的简写形式;
4)."\s":任何空白字符。空格、制表符(\t)、换行符(\n)
5)."\S":任何非空白字符。是[^\s]的简写形式;
6)."\w":任何大写、小写字母,或数字或下划线。是[a-zA-Z_0-9]的简写形式;
7)."\W":任何非单词字符。是[^\w]的简写形式;
4.限定符:
1)."+":1次或多次;
2)."?":0次或1次;
3)."*":0次或多次;
4).{n}:恰好n次;
5).{n,}:至少n次;
6).{n,m}:n(包含)--m(包含)次
5.String类中与正则表达式相关的方法:
1).split(String regex):使用regex正则表达式的规则切割字符串;
2).replaceAll(String regex,String newStr):使用newStr替换字符串中符合regex表达式的字符串;
6.Pattern和Matcher类:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
7.正则表达式主要有四种具体功能:匹配、切割、替换和获取
1)匹配:String类中的booleanmatches(String regex)方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
2)切割:String类中的String[]split(String regex)方法。
按叠词完成切割:为了让规则被重用,可将规则封装成一个组,用()完成。组的出现都有编号,从1开始。想要使用已有的组可通过\n(n就是组的编号)的形式来获取
所匹配的字符,可以用$n来获取。$在正则中表示行的结尾,所以出现在正则中不能用来表示组,一般用于替换中。如下面功能中。
3)替换: String replaceAll(String regex,String replacement)方法。
4)取:将字符串中的符合规则的子串取出。
操作步骤:
1)将正则表达式封装成对象。
2)让正则对象和要操作的字符串相关联。
3)关联后,获取正则匹配引擎。
4)通过引擎对符合规则的子串进行操作,比如取出。
二、通过部分代码熟悉使用正则表达式
1.验证QQ号码:
<span style="font-family:Microsoft YaHei;font-size:14px;">/*
* 验证QQ号码:
*
* 规则:
* 1.必须全部是数字;
* 2.5--11位;
* 3.第一位不能为0;
*/
public class Demo {
public static void main(String[] args) {
String qq = "149459999998";
System.out.println("自己验证QQ结果:" + checkQQ(qq));
System.out.println("使用正则表达式结果:" + checkQQ2(qq));
}
//自己判断
public static boolean checkQQ(String qq){
//1.验证长度是否5--11位
if(qq.length() < 5 || qq.length() > 11){
return false;
}
//2.验证是否全部是数字
for(int i = 0;i < qq.length() ; i++){
char c = qq.charAt(i);
if(c < '0' || c > '9'){
return false;
}
}
//3.判断第一位是否为0
char c = qq.charAt(0);
if(c == '0'){
return false;
}
return true;
}
//使用正则表达式
public static boolean checkQQ2(String qq){
//定义一个正则表达式
String regex = "[1-9]\\d{4,10}";
return qq.matches(regex);
}
}
</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">2.跟正则表达式相关的_String的split方法;
/*
* String的split()方法:切割字符串
*
*
*/
public class Demo {
public static void main(String[] args) {
//A.切割字符串"aa,bb,cc";
String str = "aa,bb,cc";
String[] strArray = str.split("[,]");
for(int i = 0 ;i < strArray.length ; i++){
System.out.println("--" + strArray[i]);
}
//B.切割字符串"aa.bb.cc";
str = "192.168.100.232";
strArray = str.split("[.]");
for(int i = 0 ;i < strArray.length ; i++){
System.out.println("--" + strArray[i]);
}
// C.切割字符串“-1 99 4 23”;
str = "-1 99 4 23";
strArray = str.split("[ ]");
for(int i = 0 ;i < strArray.length ; i++){
System.out.println("--" + strArray[i]);
}
System.out.println("-----------------------------");
//D."-1 99 4 23";
str = "-1 99 4 23";
strArray = str.split("[ ]+");
for(int i = 0 ;i < strArray.length ; i++){
System.out.println("--" + strArray[i]);
}
}
}
</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">3.跟正则表达式相关的_String的replaceAll方法;
public class Demo {
public static void main(String[] args) {
//1.用”#”替换叠:"sdaaafghccccjkqqqqql";
String str = "sdaaafghccccjkqqqqql";
String regex = "(.)\\1+";
System.out.println("将叠词替换为#:" + str.replaceAll(regex, "#"));
//2.把多个叠词变成一个
System.out.println("将叠词变为1个:" + str.replaceAll(regex, "$1"));
//3.:有些论坛不允许发电话,qq号,银行账号等. 把数字用"*"替换
str = "wert13245asfklwyoeworewsfd6744232433fafs";
System.out.println("将数字替换为*符合:" + str.replaceAll("\\d+", "*"));
}
}
</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">4.限定符;
public class Demo {
public static void main(String[] args) {
//1.判断1位或多位数字:
String str = "14389427584937438294732890574829057489200a";
String regex = "\\d+";
System.out.println("1." + str.matches(regex));
//2.判断手机号码:
str = "18518151175";
regex = "1[358]\\d{9}";
System.out.println("2." + str.matches(regex));
//3.判断小数(小数点最多1次)
str = "3324243214.343";
regex = "\\d+\\.?\\d+";
System.out.println("3." + str.matches(regex));
//4.判断数字(可出现或不出现小数部分):
str = "3.14";
regex = "\\d+(\\.?\\d+)?";
System.out.println("4." + str.matches(regex));
//5.判断一个QQ号码(5-15位数字,不能以0开头):
str = "1691530430";
regex = "[1-9]\\d{4,14}";
System.out.println("5." + str.matches(regex));
//6.参考并修改上面第四个例子,使之满足:"22."的格式;
str = ".3";
regex = "\\d+(\\.?\\d*)?";
System.out.println("6." + str.matches(regex));
//7.满足:+20,-3,22.格式:
str = "20.43274839";
regex = "[+-]?\\d+(\\.?\\d*)?";
System.out.println("7." + str.matches(regex));
}
}
</span>