一、限定符
符号 | 说明 |
---|---|
* | 匹配前面的符号或者子表达式零次或多次 |
+ | 匹配前面的符号或者子表达式一次或多次 |
? | 匹配前面的符号或者子表达式零次或一次 |
{n} | 匹配前面的符号或者子表达式n次 |
{n,} | 匹配前面的符号或者子表达式n次及以上 |
{n,m} | 匹配前面的符号或者子表达式n次到m次 |
测试如下:
// *
String str = "abcabc";
System.out.println(str.matches(".*"));//true
System.out.println("".matches(".*"));//true
// +
System.out.println(str.matches(".+"));//true
System.out.println("".matches(".+"));//false
// ?
System.out.println(str.matches(".?"));//false
System.out.println("".matches(".?"));//true
// {n}
System.out.println(str.matches(".{2}"));//false
System.out.println(str.matches(".{6}"));//true
// {n,}
System.out.println(str.matches(".{2,}"));//true
System.out.println(str.matches(".{3,}"));//true
// {n,m}
System.out.println(str.matches(".{1,3}"));//false
System.out.println(str.matches(".{3,6}"));//true
二、非打印字符
字符 | 说明 |
---|---|
\cx | \cx中x是控制字符(即control+键盘上某个字符(A-Za-z这些字符)),比如:\cJ就等价与control+J(即\n) ,使用时\cx |
\f | 换页符,等价于\x0c和\cL |
\n | 换行符,等价于\x0a和\cJ |
\r | 回车符,等价于\x0d和\cM |
\t | 制表符,等价于\0x9和\cI |
\s | 匹配任何空白内容,包括空格和[\r\n\f\t]有些地方会有\v(垂直制表符)Unicode编码包括全角空格 |
\S | 刚好与\s相反,匹配任何非空白内容 |
以上除了部分转义字符,其他的在具体使用的时候都是双反斜杠\\
测试如下:
// \cx
System.out.println("\r".matches("\\cM"));//true
System.out.println("\t".matches("\\cI"));//true
System.out.println("\n".matches("\\cJ"));//true
System.out.println("\f".matches("\\cL"));//true
// \f \n \r \t 与十六进制字符的正则表达式
System.out.println("\f".matches("\\x0c"));//true
System.out.println("\n".matches("\\x0a"));//true
System.out.println("\r".matches("\\x0d"));//true
System.out.println("\t".matches("\\x09"));//true
//\s \S
System.out.println("\n\t\f\r".matches("\\s{4}"));//true
System.out.println("asdf".matches("\\S{4}"));//true
三、特殊字符
符号 | 说明 |
---|---|
^ | 匹配输入字符的开始位置;当其在方括号([ ])中时表示不接受方括号表达式中的字符集合 |
$ | 匹配输入字符的结束位置;当设置了RegExp对象的Multiline属性则$也可以匹配\n和\r |
[ | 标记一个方括号表达式的开始 |
] | 标记一个方括号表达式的结束 |
( | 标记一个子字符串表达式的开始 |
( | 标记一个子字符串表达式的结束 |
{ | 标记限定表达式的开始 |
} | 标记限定表达式的结束 |
| | 指明两项之间的选择 |
\ | 将一个字符标记为转义字符或者原义字符 |
测试如下:
System.out.println("132133513".matches("^\\d+$"));//true
System.out.println("safasf".matches("[a-z]+"));//true
System.out.println("sagsdgs".matches("\\w+(@163\\.com)?"));//true
System.out.println("sagsdgs@163.com".matches("\\w+(@163\\.com)?"));//true
System.out.println("18312345645".matches("(183){1}\\d+"));//true
System.out.println("0.123".matches("([1-9]\\d*|0)\\.\\d*"));//true
System.out.println("101.123".matches("([1-9]\\d*|0)\\.\\d*"));//true
System.out.println(".".matches("\\."));//true
最后介绍几种常用的正则表达式:
字符 | 说明 |
---|---|
\w | 全部普通字符,即[a-zA-z0-9_] |
\W | 特殊字符(不包含下划线),即[~!@#$%^&*()_=+;:’。等] |
\d | 全部数字,即[0-9] |
. | 除‘\n’换行符外其它任意单字符 |
测试如下:
System.out.println("sadasd".matches("\\w*"));//true
System.out.println("asdsa56f46as64@@$".matches(".*"));//true
System.out.println("061568415".matches("\\d*"));//true