字符 | 解释 |
---|---|
\t | 制表符 |
\n | 换行符 |
\r | 回车符 |
\f | 换页符 |
\a | 报警符 |
特殊字符 | 解释 |
---|---|
$ | 匹配一行的结尾,匹配本身 |
^ | 匹配一行的开头也表示非,看使用位置 |
() | 子表达式的开始结束位置 |
[] | 中括号表达式的开始和结束位置 |
{} | 用于标记前面子表达式出现的频度 |
* | 指定前面子表达式0或多次 |
+ | 指定前面子表达式一次或多次 |
? | 前面子表达式0或1次 |
. | 匹配除换行符以外的任何单字符 |
\ | 转义符 |
| | 或的分隔符 |
()与[]的区别,()代表整个[]代表其中一个,(ab)代表 “ab” ,[ab] 代表a b中一个
预定义字符 | 解释 |
---|---|
\d | 匹配0到9的数字 |
\D | 匹配非数字 |
\s | 匹配所有的空白字符,空格 制表符 回车符等等 |
\w | 匹配所有的单词字符,0-9数字,英文字母和_ |
\W | 上一项的非 |
API
String pattern = "****" //正则字符串
Pattern compile = Pattern.compile(pattern);//编译正则
String value = "xxxx"; //需要匹配的字符串
Matcher matcher = compile.matcher(value); //正则与字符串匹配
matcher.matches() //返回 true or false 匹配上了/没有匹配上
matcher .replaceAll("字符") //把匹配上的都替换成"字符"
while (matcher.find()) {
String s = matcher.group() //find()一次group()一次,依次取出匹配到的值
}
上面到底使用matches()还是find()判断取决于是否是整个字符串匹配, 比如我的正则是匹配整个字符串是否符合正则要求就用matches ,如果是看字符串中是否包含正则表达的字符,就用find
常用的表示:
表达式 | 解释 |
---|---|
(a|b) | 匹配 a或者b |
(ac) | 匹配"ac" |
[ac] | 匹配a或c |
[a-c] | 匹配 a到c中的一个 |
[0-9] | 匹配数字0到9中的一个 |
[^a] | 匹配不是a |
[a-z&&[^def]] | 匹配a-z中的一个并且不是def中的一个 |
[a-c[h-i]] | 匹配a到c h到i中的一个[a-ch-i] |
[\u0041-\u0056] | 匹配中文所有字符 |
[a-z]{2} | a到z中的字符出现两次 |
[a-z]{1,} | a到z中的字符至少出现1次 |
[a-z]{2,4} | a到z中的字符出现2-4次 |
a*b | a出现0到多次最后是b |
a+ | a出现一次或者多次 |
上面只是一些简单的使用,至于匹配手机号身份证号,邮件等正则百度搜索一下一大片,针对于需求中有自己对字符进行校验的,可以自己写一下.
贪婪模式:
数量表示符默认是贪婪模式,如 “a*” ,a就代表a,而*代表着零次或者多次,会一直匹配下去,直到匹配到不是a为止
勉强模式
以数量标识符最少的匹配,就是跟再数量表示符的最后加一个"?" 如"a*?" a代表a, *代表着零到多次,那么就匹配0次 “a+?” "+"代表着一到多次,所以就匹配一次