一,简介
正则表达式定义了字符串的一种结构。只要满足这种规则的字符串都可以与之进行匹配。
二,正则表达式
* : 表示前面字符可以有零次或多次。举例:ab* 能匹配a、ab、abb、abbb……。
+ : 表示前面字符可以有一次或多次。举例:ab+ 能匹配ab、abb、abbb……。等价于"abb*"。
? : 表示前面字符可以有零次或一次。举例:or? 能匹配o和or。
^ : 用于限制开头。
$ : 用于限制结尾。举例:"^\\d{15}|\\d{18}|\\d{17}X$"
. : 表示除\n以外任意一个单独字符。
[a-z]:表示小写的a 到 z范围中任意一个字符。
[A-Z] : 表示大写的A 到 Z范围中任意一个字符。
[a-zA-Z] : 表示a到z或A到Z中任意一个字符。
{} : 限制字符出现次数。举例 :{1,}表示匹配一次或多次,等价于+;{6} :表示匹配6次;{3,6}表示匹配3到6次。
() : 用于框定一个整体。举例:(ab){3,6}表示匹配”ab” 3到6次。
| : 两者选一。举例:"^\\d{15}|\\d{18}$",表示15位或18位数字。
[^abc] : 表示除a,b,c之外的任意一个字符(^否定)。
[abc] : 表示字符a,b,c中的任意一个。
\D : 表示一个非数字字符,也就是[^0-9]。
\d : 表示数字[0-9]。
\W :表示一个非单词的字符,即[^\\w]。
\w : 表示一个单词字符(字母,数字,下划线),即[a-zA-Z_0-9]。
\B : 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\b : 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\ : 转义字符(反斜杠)。
/ : 普通字符(正斜杠)。
三,应用举例
/**匹配整数**/
Pattern pattern = Pattern.compile("^-?\\d+$"); //^全局结构匹配$
Matcher matcher = pattern.matcher("-123");//匹配整数
System.out.println(matcher.matches());//true
/**匹配身份证**/
Pattern pattern = Pattern.compile("^\\d{15}|\\d{18}|\\d{17}X$"); //^全局结构匹配$
Matcher matcher = pattern.matcher("42800519800107245X");//匹配身份证
System.out.println(matcher.matches());//true
/**匹配手机号**/
Pattern pattern = Pattern.compile("^(13[0-9]|14[5|7]|15[0-9]|17[0-9]|18[0-9])\\d{8}$"); //^全局结构匹配$
Matcher matcher = pattern.matcher("13247160020");//匹配手机号
System.out.println(matcher.matches());//true