import java.util.regex.Pattern 正则表达式包
import java.util.regex.Matcher 文本匹配器包
作用1 :正则表达式可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性。
作用2 :正则表达式可以在一段文字中查找满足要求的内容。
常用方法
java
public String[ ] matches(String regex) //判断是否与正则表达式匹配
public String replaceAll(String regex,String newStr) //按照正则表达式的规则进行替换
public String[ ] spilt(String regex) //按照正则表达式的规则进行切割字符串
一、校验字符串

1.1、字符类(只匹配一个字符)

注意:和用&&,或用|
java
public class matchesTest {
public static void main(String[] args) {
// 一个大括号只能是一个字符
// 只能是a b c
System.out.println("a".matches("[abc]")); // true
System.out.println("z".matches("[abc]")); // false
System.out.println("ab".matches("[abc]")); // false
System.out.println("ab".matches("[abc][abc]")); // true
// 不能出现a b c
System.out.println("a".matches("[^abc]")); // fasle
System.out.println("zz".matches("[^abc]")); // fasle
// a到z A到Z(包括头尾范围)
System.out.println("b".matches("[a-zA-Z]")); // true
System.out.println("0".matches("[a-zA-Z]")); // fasle
// [a-d[m-p]] a到d 或者 m到p
System.out.println("b".matches("[a-d[m-p]]")); // true
System.out.println("e".matches("[a-d[m-p]]")); // fasle
// [a-z&&[def]] a-z和def的交集
// 细节:如果要求两个范围的交集 需要写&&
// 如果写成了一个& 就不表示交集 只是单单一个符号而已
System.out.println("a".matches("[a-z&&[def]]")); // true
System.out.println("&".matches("[a-z&&[def]]")); // false
// [a-z&&[^bc]] a-z 和 非bc 的交集
System.out.println("a".matches("[a-z&&[^bc]]")); // true
System.out.println("b".matches("[a-z&&[^bc]]")); // false
// [a-z&&[^m-p]] a到z和除了m到p的交集
System.out.println("a".matches("[a-z&&[^m-p]]")); // true
System.out.println("m".matches("[a-z&&[^m-p]]")); // false
}
}
1.2、预定义字符预定义字符(只匹配一个字符)

java
public class matchesTest {
public static void main(String[] args) {
// \表示转义字符 :改变后面字符原本含义
// 练习:以字符串形式打印一个双引号
// System.out.println("\"");
// .表示任意一个字符
System.out.println("你".matches(".")); // true
System.out.println("你a".matches("..")); // true
// \\d 只能是任意一个数字
// 简单来说 两个\表示一个\
System.out.println("a".matches("\\d")); // fasle
System.out.println("3".matches("\\d")); // true
System.out.println("333".matches("\\d")); // fasle
System.out.println("333".matches("\\d\\d\\d")); // true
// \\w只能是一个单词字符 [a-zA-Z0-9]
System.out.println("z".matches("\\w")); // true
System.out.println("21".matches("\\w")); // false
System.out.println("你".matches("\\w")); // fasle
System.out.println("-".matches("\\w")); // true
// 非单词字符
System.out.println("你".matches("\\W")); // true
// 以上正则表达式只能校验单个字符
}
}
1.3、数量词

java
public class matchesTest {
public static void main(String[] args) {
//必须是数字 字母 下划线 至少 6位
System.out.println("2442fsfsf".matches("\\w{6,}")); //true
System.out.println("244f".matches("\\w{6,}")); //false
//必须是数字和字符 必须是 4位
System.out.println("23dF".matches("[a-zA-Z0-9]{4}")); //true
System.out.println("23_F".matches("[a-zA-Z0-9]{4}")); //false
System.out.println("23dF".matches("\\w&&[^_]{4}")); //true
System.out.println("23_F".matches("\\w&&[^_]{4}")); //fasle
}
}
1.4、练习
java
public class matchesTest {
public static void main(String[] args) {
//手机号: 三部分
//一、 1 表示手机号码只能由1开头
//二、 [3-9] 表示手机号码第二位只能是3-9之间
//三、\\d{9} 表示任意数字可以出现9次,也只能出现9次
String regex1 = "1[3-9]\\d{9}";
System.out.println("13112345678".matches(regex1)); //true
System.out.println("131123456789".matches(regex1)); //fasle
//座机号码: 三部分
//一、区号: 0表示区号只能以0开头
// \\d{2,3} 表示区号从二位开始可以是任意数字,可以出现2~3次
//二、 - ?表示次数 次数0次或者1次
//三、 号码 第一位不能以0开头;从第二位开始可以为任意数字 ;号码总长度: 5-10位
String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
System.out.println("020-2324242".matches(regex2)); //true
//邮箱号码 :三部分
//一、 @左边 \\w+任意字符数字下划线至少出现一次就行
//二、 @只能出现一次
//三、 .的左边可以是字母和数字 [\\w&&[^_]] 任意字符数字总共出现2-6次 {2,6}
// . \\.
// .的右边 所有的大写字母和小写字母 只能出现2-3次 [a-zA-Z]{2,3}
String regex3 = "\\w+@[\\w&&[^_]]{2,6}\\.[a-zA-Z]{2,3}";
System.out.println("zhangsan@163.com".matches(regex3)); //true
//24小时
String regex4 = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
System.out.println("23:11:11".matches(regex4)); //true
String regex5 = "([01]\\d|2[0-3])(:[0-5]\\d){2}";
System.out.println("23:11:11".matches(regex5)); //true
}
}