Java中正则表达式案例以及关于?!的使用理解
匹配规则:
- 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。
- []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
- -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。
- 在中括号里面和外面含义不同,如在外时,就表示开头,如7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。
- .表示匹配任意的字符。
- \d表示数字。
- \D表示非数字。
- \w表示字母、数字、下划线,[a-zA-Z0-9_]。
- \W表示不是由字母、数字、下划线组成。
- [\u4e00-\u9fa5]匹配汉字
- ?: 表示出现0次或1次。
- +表示出现1次或多次。
- *表示出现0次、1次或多次。
- {n}表示出现n次。
- {n,m}表示出现n~m次。
- {n,}表示出现n次或n次以上。
案例1:
以字母开头,剩下的字符可以是大写字母或者数字或者是小写字母,但是不能全部是字母或者除开头外全是数字
public static void mainx9() {
System.out.println("请输入一个字符串:");
Scanner str1 = new Scanner(System.in);
String r1 = str1.nextLine();
if (r1.matches("^[a-zA-Z](?![a-z]{6,12}|[0-9]{5,11}|[A-Z]{6,12})[a-zA-Z0-9]{5,11}")){//断言必须在可执行代码之前使用
System.out.println("正确");
}else {
System.out.println("错误");
}
}
案例2:
第一个字符为a,第二个字符,b或者是c
public static void mainX8(String[] args) {
String str1="ab";
if (str1.matches("^[a][bc]")){//第一个字符为a,第二个字符,b或者是c
System.out.println("正确");
}else {
System.out.println("错误");
}
}
案例3:
写出“大家好666”的正则匹配
public static void mainx7() {
System.out.println("请输入一个字符串:");
Scanner str1 = new Scanner(System.in);
String r1 = str1.nextLine();
if (r1.matches("\\d{0,}\\w{0,}[\u4e00-\u9e00]{0,}大家好666\\d{0,}\\w{0,}[\u4e00-\u9e00]{0,}")){/*不管前面或者后面是什么字符,只要包含“大家好666”执行结果都是正确的*/
System.out.println("正确");
}else {
System.out.println("错误");
}
}
案例4:
输入的8-20个字符可以是a-z或者是0-9,但是不能都是字母或者都是数字
public static void mainx6() {
System.out.println("请输入一个字符串:");
Scanner str1 = new Scanner(System.in);
String r1 = str1.nextLine();
if (r1.matches("(?![a-z]{8,20}|[0-9]{8,20})[a-z0-9]{8,20}")) {/*输入的8-20个字符可以是a-z或者是0-9,但是不能都是字母或者都是数字*/
System.out.println("正确");
} else if (r1.matches("(?![A-Z]{8,20}|[0-9]{8,20})[A-Z0-9]{8,20}")){
System.out.println("正确");
}else if (r1.matches("(?![A-Z]{8,20}|[a-z]{8,20})[A-Za-z]{8,20}")){
System.out.println("正确");
}else {
System.out.println("错误");
}
}
案例5:
a-z的字符最少8个,最多12个
public static void mainx5() {
System.out.println("请输入一个字符串:");
Scanner str1 = new Scanner(System.in);
String r1 = str1.nextLine();
if (r1.matches("[a-z]{8,12}")) {/*a-z的字符最少8个,最多12个*/
System.out.println("正确");
} else {
System.out.println("错误");
}
}
案例6:
输入的字符中至少包含五个小写字母
public static void mainx4() {
System.out.println("请输入一个字符串:");
Scanner str1 = new Scanner(System.in);
String r1 = str1.nextLine();
if (r1.matches("[a-z]{5,}[\\w\\d[\u4e00-\u9fa5]]{0,}")) {//输入的字符中至少包含五个小写字母
System.out.println("正确");
} else {
System.out.println("错误");
}
}
案例7:
5个a-z的字符;
public static void mainx3() {
System.out.println("请输入一个字符串:");
Scanner str1 = new Scanner(System.in);
String r1 = str1.nextLine();
if (r1.matches("[a-z]{5}")) {/*5个a-z的字符;*/
System.out.println("正确");
} else {
System.out.println("错误");
}
}
案例8:
判断是否由3个字母组成,第一个字母范围是a-c,第二个字母范围是e-g,第三个字母范围是x-z
public static void mainx2() {
System.out.println("请输入一个字符串:");
Scanner str1 = new Scanner(System.in);
String r1 = str1.nextLine();
if (r1.matches("^[a-c]{1}[e-g]{1}[x-z]{1}")) {/*判断是否由3个字母组成,第一个字母范围是a-c,第二个字母范围是e-g,第三个字母范围是x-z*/
System.out.println("正确");
} else {
System.out.println("错误");
}
}
案例9:
判断是否是 hellokitty
public static void mainx1() {
System.out.println("请输入一个字符串:");
Scanner str1 = new Scanner(System.in);
String r1 = str1.nextLine();
if (r1.matches("^hellokitty")) {/*判断是否是 hellokitty*/
System.out.println("正确");
} else {
System.out.println("错误");
}
}
在正则表达式中“^”符号在“[]”中使用时可以看做是逻辑运算符非的用法;
两个中括号这样:"[][]"时可以视作并集;
(?![a-z]{6,12}|[0-9]{5,11}|[A-Z]{6,12})[a-zA-Z0-9]{5,11}在这个表达式中使用小括号括起来的部分可以视作一个部分;
在Java中?!的作用相当于排除,?![a-z]{6,12}|[0-9]{6,12}|[A-Z]{6,12}这段代码的意思是说6-12个字符都是大写字母或者都是小写字母,或者是都是数字。
分享结束