一、正则表达式语法
(1)范围匹配 [ ] (一个中括号表示匹配一个)
[abc]:
匹配abc中任意一个字符
[a-z]:
匹配小写字母a-z中的一个
[A-Z]:
匹配大写字母A-Z中的一个
[0-9]:
匹配数字0-9中的一个
组合匹配:
[a-zA-Z0-9]:
匹配a-z或者A-Z或者0-9之间的任意一个字符
[a-dm-p]:
匹配a-d或m-p之间的任意一个字符
排除:
[^abc]:
匹配除a、b、c之外的任意一个字符 //^在中括号里面表示非的意思
[^a-z]:
匹配除小写字母外的任意一个字符
代码演示
public class Test {
public static void main(String[] args) {
//匹配abc中任意一个字符。
System.out.println("A".matches("[abc]")); //false
System.out.println("ab".matches("[abc]")); //false
System.out.println("a".matches("[abc]")); //true
System.out.println("---------------------------------------");
--------------------------------------------------------------------------------------------------
//[a-z]:匹配小写字母a-z中的一个
System.out.println("B".matches("[a-z]")); //false
System.out.println("b".matches("[a-z]")); //true
System.out.println("---------------------------------------");
----------------------------------------------------------------------------------------------------
//[a-zA-Z0-9]:匹配a-z或者A-Z或者0-9之间的任意一个字符
System.out.println("我".matches("[a-zA-Z0-9]")); //false
System.out.println("0".matches("[a-zA-Z0-9]")); //true
System.out.println("0".matches("[a-zA-Z0-9]")); //true
System.out.println("f".matches("[a-zA-Z0-9]")); //true
System.out.println("A".matches("[a-zA-Z0-9]")); //true
//这里加了一个空格,匹配范围就会更改为[a-z A-Z0-9]:
// 匹配a-z或者空格或者A-Z或者0-9之间的任意一个字符
System.out.println(" ".matches("[a-z A-Z0-9]")); //true
------------------------------------------------------------------------------------------------------
System.out.println("------------------------");
System.out.println("A".matches("[^A-Z]")); //false
System.out.println("a".matches("[^A-Z]")); //true
System.out.println("0".matches("[^A-Z]")); //true
}
}
(2)预定义字符
".":
匹配一个任意字符
"\d":
匹配一个数字字符,相当于[0-9]
"\D":
匹配一个非数字,相当于[^0-9]
"\s":
匹配一个空白字符
"\S":
匹配一个非空白字符
"\w":
匹配一个单词字符,包括大小写字母,数字,下划线,相当于 [a-zA-Z0-9_]
"\W" :
匹配一个非单词字符
^ :
匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思
$ :
匹配字符串的结束
注意:有\的记得加\,变成\\,表转义
如: \\d \\D \\s \\S \\w \\W
代码演示
public class Test2 {
public static void main(String[] args) {
//匹配任意一个字符
System.out.println(".".matches(".")); //true
//匹配任意三个字符
System.out.println("a".matches("...")); //false
System.out.println("-----------------------------------------");
//匹配是数字开头和数字结束的三个数字字符
System.out.println("02a".matches("^\\d\\d\\d$")); //false
System.out.println("a12".matches("^\\d\\d\\d$")); //false
System.out.println("a1a".matches("^\\d\\d\\d$")); //false
System.out.println("250".matches("^\\d\\d\\d$")); //true
}
}
(3)数量词(限定符)(放在后面)
? 0次或1次
* 0次或多次 (任意次)
+ 1次或多次
{n} 重复n次
{n,} 重复n次以上 (至少n次) >=n
{n,m} 重复n到m次(包括n和m)
//注意:限定符只能影响到离它最近的那个规则,如果想要影响整体,就给那个整体加()
// 如:
需要匹配 over!三次
System.out.println("over!over!over!".matches("over!{3}")); //false ,只能影响到!
System.out.println("over!over!over!".matches("(over!){3}")); //true ,影响到整体
代码演示
public class Test3 {
public static void main(String[] args) {
//表示匹配a-z中的字符 "一次"
System.out.println("ab".matches("[a-z]?")); //false
System.out.println("a".matches("[a-z]?")); //true
System.out.println("----------------------------");
-----------------------------------------------------------------------------------------
//表示匹配a-z中的字符 "任意次"
System.out.println("abcabc".matches("[a-z]*")); //true
System.out.println("-------------------------");
------------------------------------------------------------------------------------------
//表示匹配a-z中至少一次
System.out.println("ab".matches("[a-z]+")); //true
System.out.println("-------------------------------------");
-----------------------------------------------------------------------------------------
//表示匹配任意4个数字字符
System.out.println("abcd".matches("\\d{4}")); //false
System.out.println("0123".matches("\\d{4}")); //true
System.out.println("----------------------------------");
----------------------------------------------------------------------------------------------------
//表示匹配任意一个字符5次以上
System.out.println("abc".matches("\\w{5,}")); //false
System.out.println("abcdefg".matches("\\w{5,}")); //true
System.out.println("-----------------------------------------");
----------------------------------------------------------------------------------------------------
//表示匹配任意一个单词字符5-7次
System.out.println("abc".matches("\\w{5,7}")); //false
System.out.println("abcdefgh".matches("\\w{5,7}")); //false
System.out.println("abcde".matches("\\w{5,7}")); //true
}
}
二、正则表达式作用
*正则表达式是一个强大的字符串处理工具,是用于匹配字符串的模板,
*可以对字符串进行格式校验,查找、提取、替换等操作
三、String类中支持正则表达式的方法
* boolean matches(String regex)
判断该字符串是否匹配指定的正则表达式
* String replaceAll(String regex, String replacement)
将该字符串中所有匹配正则表达式的内容替换成新的字符串,并返回替换后的新的字符串
* String[] split(String regex)
根据匹配规则,把字符串分割成多个子串
更多具体用法:
1.Java中String中的replace的四个方法(用于替换字符串的方法),含replace和replaceall的区别
四、案例
(1)身份证案例
import java.util.Scanner;
public class Test4 {
/*
号码为18位,不能以数字0开头,前17位可以是数字,最后一位可以是数字或者大写字母X
*/
public static void main(String[] args) {
Scanner rd=new Scanner(System.in);
String a=rd.next();
Boolean b=a.matches("[1-9]\\d{16}[0-9X]");
System.out.println(b);
}
}
(2)邮箱案例
public class Main {
public static void main(String[] args) {
//邮箱案例
Scanner rd=new Scanner(System.in);
String a=rd.next();
boolean b=a.matches("^[a-zA-Z][a-zA-Z0-9_]{5,18}");
System.out.println(b);
}
}
作者:KJ.JK
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习