正则表达式(regular expression):就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征,它写在" "之间。
Java中对于以\开头的正则表达式,前还要再要加一个\;eg:匹配三个数字,\\d{3}
一、匹配单个字符表达式
\d{3}:只匹配三个数字
a:只匹配字符a
[abc]:匹配单个字符,要求是a、b、c其中之一
[a-z]:匹配单个字符,要求是小写字母
[A-Z]:匹配单个字符,要求是大写字母
[a-zA-Z0-9_]:匹配单个字符,要求是小写字母或大写字母或数字或_
[^a]:匹配单个字符,不能是a
[^abc]:匹配单个字符,不能是a、b、c
\\\\:匹配单个反斜杠,在正则表达式中,\\解释为\,\\被正则表达式引擎解释为\;正则中两个\解释为一个\
\d:匹配单个数字,等价于[0-9]
\D:匹配单个字符,要求非数字
\w:匹配单个字母、数字或_,等价于[a-zA-Z0-9_],但不支持/n和/d
\W:匹配单个字符,要求非字母、数字或_
\s:匹配单个空白字符,\n、\r、\t或空格
\S:匹配单个非空白字符
. 匹配单个除换行符(\n)以外的任意字符
\. 匹配.符号本身
\\. 匹配.符号本身
\$ 匹配$符号本身
\^ 匹配^符号本身
二、匹配字符串
1. 汉字:^[\u4e00-\u9fa5]{0,}$
2. 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3. 长度为3-20的所有字符:^.{3,20}$
4. 由26个英文字母组成的字符串:^[A-Za-z]+$
5. 由26个大写英文字母组成的字符串:^[A-Z]+$
6. 由26个小写英文字母组成的字符串:^[a-z]+$
7. 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
8. 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
9. 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10. 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11. 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+ 12 禁止输入含有~的字符:[^~\x22]+
三、匹配行边距
^a:以a开头
b$:以b结尾
ps:对Java来说,本身整体匹配,所以可以不用加行开始和结束符,例如匹配a123b,可以用"a\\d{3}b"
四、数量词(放表达式之后)
{n} 表达式重复n次,eg:"\w{2}"等价于"\w\w","a{5}"等价于"aaaaa"
{m,n} 表达式至少重复m次,至多重复n次,eg:"ba{1,3}"可匹配"ba"、"baa"、"baaa"
{m,_} 表达式至少重复m次,eg:"\w\d{2,_}"可匹配"a12"、"_4576"、"M1234"、"455"等
? 匹配表达式0次或1次,等价于{0,1}
+ 表达式出现至少1次,等价于{1,_},eg:"a+b"可匹配"ab"、"aaab"、"aaaaab"
* 表达式不出现或出现任意次,等价于{0,_},eg:"a*b"可匹配"b"、"ab"、"aab"、"aaab"
五、转义字符
\r:回车
\n:换行
\t:制表符,即Tab
\f:换页
\b:退格
六、贪婪模式和非贪婪模式
一般默认是贪婪模式,只要满足条件全部匹配
用非贪婪模式需要加?,选取尽可能少的满足条件的String进行匹配