正则表达式的意义
正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。
正则表达式的匹配方法和规则
1、使用String类中的的matches方法:
判断是否匹配正则表达式,匹配返回true,不匹配返回false
public boolean matches(String regex):
2、常见的匹配规则:
- 字符类(默认只匹配一个字符)
字符类:
[abc] 只能是a, b, 或c
[^abc] 除了a, b, c之外的任何字符
[a-zA-Z] a到z A到Z,包括(范围)
[a-d[m-p]] a到d,或m到p:([a-dm-p]联合 并集)
[a-z&&[def]] d, e, 或f(交集)
[a-z&&[^bc]] a到z,除了b和c:([ad-z]减法)
- 预定义的字符类(默认匹配一个字符)
预定义的字符类:
. 任何字符
\d 一个数字: [0-9]
\D 非数字: [^0-9]
\s 一个空白字符: [ \t\n\x0B\f\r]
\S 非空白字符: [^\s]
\w [a-zA-Z_0-9] 英文、数字、下划线
\W [^\w] 一个非单词字符
- 贪婪的量词(配合匹配多个字符)
贪婪的量词(配合匹配多个字符):
X? X , 一次或根本不
X* X,零次或多次
X+ X , 一次或多次
X {n} X,正好n次
X {n, } X,至少n次
X {n,m} X,至少n但不超过m次
简单使用:
System.out.println("a".matches("[abc]")); 将返回true
System.out.println("z".matches("[abc]")); 将返回 false
System.out.println("ab".matches("[abc]+")); 将返回true(该处使用了贪婪量词所以对照可以出现一次或者多次)
判断数字、字母、下划线且至少有5位(用贪婪量词校验):
System.out.println("454afa".matches("\\w{5,}")); 将返回true
判断验证码任意数字字母 非下划线 必须4位: 以下有两种写法
System.out.println("af1s.matches("a-zA-Z0-9")); 将返回true
System.out.println("af1s".matches("[\\w&&[^-]]{4}")); 将返回true
正则表达式的案例
要求:
模拟用户输入手机号码、验证格式正确,并给出提示,直到格式输入正确为止。
public class test {
public static void main(String[] args) {
check();//调用校验方法
}
//定义校验方法
public static void check(){
Scanner sc = new Scanner(System.in);
//输入手机号
while (true) {
System.out.println("请输入手机号:");
String phoneNum = sc.next();
//校验手机号
if (phoneNum.matches("1[3-9]\\d{9}")){ //正则表达式
System.out.println("号码格式正确 ----》已通过");
break;//验证通过 跳出循环
}else {
System.out.println("号码输入格式有误-");
}
}
}
}
正则表达式在字符串方法中应用
方法名 | 说明 |
public String replaceAll(String regex,String newStr) | 按照正则表达式匹配的内容进行替换 |
public String[] split(String regex): | 按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。 |
public static void main(String[] args) {
//split分割提取
String names = "光线白刃取sfa1奥特水流fdhd奥特过肩摔";
String[] arr = names.split("\\w+");
for (int i = 0; i <arr.length ; i++) {
System.out.println(arr[i]);
}
}
public static void main(String[] args) {
//replaceAll替换
String name1 = "光线白刃取sfa1奥特水流fdhd奥特过肩摔";
String neme2 = name1.replaceAll("\\w+"," ");//将字符替换为空格
System.out.println(neme2);
}