正则表达式
1 . 任意单个字符,除了换行符外
一个点就代表一个字符
String str="Java";
System.out.println(str.matches("..va"));//输出true
System.out.println(str.matches(".va"));//输出false
2 (ab|cd) ab或者cd
String str="ten";
System.out.println(str.matches("t(en|im)"));//输出true
//单个字符或者多个字符也是可以的哦
String str1="Java";
System.out.println(str1.matches("J(a|v)va"));//输出true
System.out.println(str1.matches("(Jav|JJJ)a"));//输出true
3 [abc] a或b或c
String str="Java";
System.out.println(str.matches("Ja[uw]a"));//输出false
System.out.println(str.matches("Ja[uvw]a"));//输出true
4 [ [ [^abc ] ] ] 除了a、b或者c之外的任意字符
String str1="Java";
System.out.println(str1.matches("Ja[^abcdv]a"));//输出false
System.out.println(str1.matches("Ja[^abcd]a"));//输出true
5 [a-z] a到z
是区分大小写的,两端都是闭区间
String str1="Java";
System.out.println(str1.matches("Ja[A-V]a"));//输出false
System.out.println(str1.matches("Ja[a-v]a"));//输出true
6 [a-e[m-p]] a到e或者m到p
String str1="Java";
System.out.println(str1.matches("[A-G[I-M]]av[a-d]"));//输出true
7 [a-e&&[c-p]] a到e与c到p的交集
String str1="Java";
System.out.println(str1.matches("[A-P[I-M]]av[a-d]"));//输出true
Tips 为什么正则表达式是\d,而敲的时候要\\d呢
因为反斜杠是一个特殊的字符,在字符串中开始转移序列,因此用\ \来表示\
8 \d 一位数字,等同于0-9
String str1="Java23";
System.out.println(str1.matches("Java[\\d][\\d]"));//输出true,两位数字就要用两次哦
System.out.println(str1.matches("Java\\d\\d"));//输出true,意外发现,不需要方括号也可以输出
9 \D 一位非数字
String str1="Java23";
System.out.println(str1.matches("[\\D]ava23"));//输出true System.out.println(str1.matches("J\\Dva\\d\\d"));//输出true
10 \w 单词字符
单词字符是任意的字母,数字或者下划线字符。
11 \W 非单词字符
12 \s 空白字符
13 \S 非空白字符
14 p* 0次或者多次出现模式p
多个字母要加括号哦
String str1="ababa";
System.out.println(str1.matches("(ab)*"));//输出false,只能是0次或者是多次
String str2="ababab";
System.out.println(str2.matches("(ab)*"));//输出true
String str3="aaaaaa";
System.out.println(str3.matches("(ab)*"));//输出false,不是说0次也可以吗,为什么是false
System.out.println(str3.matches("aaaaaa(ab)*"));//这样就输出true了哇
15 p+ 一次或者多次出现模式p
String str1="aaa";
System.out.println(str1.matches("a+b*"));//输出true
16 p? 0次或者1次出现模式p
String str1="aaa"; System.out.println(str1.matches("b?"));//输出false
System.out.println(str1.matches("aaab?"));//输出true
17 p{n} 正好出现n次模式p
18 p{n,} 至少出现n次模式p
19 p{n,m} n到m出现模式p
String str1="abb"; System.out.println(str1.matches("a{1,9}bb"));//输出true,说明是包含n到m的 System.out.println(str1.matches("a{2,9}bb"));//输出false
20 \p{P} 一个标点字符
String str1="j!erw";
System.out.println(str1.matches("j\\p{P}erw"));//输出true
示例:
1.社会安全号的模式为xxx-xx-xxxx,x是一位数字
String str1="111-22-2222";
//表示数字恰好出现了3次-恰好出现了2次-恰好出现了4次
System.out.println(str1.matches("[\\d]{3}-[\\d]{2}-[\\d]{4}"));//输出true
2.偶数表示
偶数是以数字0、2、4、6、8结尾
String str1="112";
System.out.println(str1.matches("[\\d]*[02468]"));//输出true,结尾是偶数就行了为什么只要结尾就行了呢
3 电话号码表示模式是(xxx)-xxx-xxxx, x代表一位数字,其中不能以0开头
String str1="(123)-123-1231";
System.out.println(str1.matches("\\([\\d]{3}\\)-[\\d]{3}-[\\d]{4}"));//输出true
String str1="(123-123-1231";
System.out.println(str1.matches("\\([\\d]{3}\\)-[\\d]{3}-[\\d]{4}"));//输出false,少括号不行哦
tips ()在正则表达式中是特殊字符,用于对模式分组。为了在正则表达式中表示字面值,必须使用 \ \
4.假定姓由最多25个字母组成,并且第一个字母为大写
String str1="Adsfds";
System.out.println(str1.matches("[A-Z][a-z[A-Z]]{1,24}"));//输出true
tips 不能随便将空白符放入到正则表达式中,会报错 ,编译都过不了
5 java标识符
标识符必须以字母,下划线或者以美元符号($)开头,不能以数字开头
标识符是一个由字母,数字,下划线或美元符号组成的字符序列
String str1="Adsfds$";
System.out.println(str1.matches("[a-z[A-Z][$]][\\w||$]*"));//输出true