1. 一个用于指定规则的类
2. matches(regex)
[ ] : 表示一个字符。 [abc] 匹配a\b\c中任意一个字符
- : 用于表示范围 。 [a-z] 匹配a~z中任意一个字符
^ : 表示过滤。 [^a] 匹配除a意外任意字符
. : 表示任意一个字符。 [ .] 匹配任意一个字符 ,若想匹配一个"." 则需要转义,java中用\表示后面的字符需要转义,在正则表达式中"\"也需要转义,所以"\\."表示匹配一个"."。
\d : 表示匹配 一个数字 。
\D :表示匹配一个非数字。
\s: 表示匹配一个空白字符。
\S : 表示匹配一个非空白字符
\w : 表示匹配一个单词字符
+ : 表示至少出现一次。 "a.+" 匹配以"a"开头至少有两个字符组成的字符串。
* :表示可有可无。 "a.*" 匹配以"a" 开头 的任意字符串。
? : 表示出现0或1次 "a.?" 匹配以"a"开头最多有两个字符组成的字符串 。
{ } : 表示出现次数".{5}" 表示由5个字符组成的字符串;".{5,}" 表示至少由5个字符组成的字符串 ;".{5,10}" 表示由5~10个字符组成的字符串。
补充:\r回车:光标移至初始位置 \n 换行 : 光标移至下一行 JDK1.7以后不再区分。
() : 表示一盒捕获组 ".*(abc).*" 匹配含有abc的字符串。捕获组会自动编号,下次想使用时可用编号"\\1"”引用。 ".*(abc).*\\1.*" 匹配含有与两个abc的字符串。捕获组编号规则:(第一的出现的位置开始计算。 匹配叠字: "(.)\\1+" ;匹配ABAB格式的字符串 :"(..)\\1
注意:"(.){2}" 表示出现两次,内容可以不同 "(.)\\1" 表示出现两次,内容必须相同 。
练习: 1.匹配小数
2. 匹配邮箱
3. 匹配密码 :6~12位 ,至少有小写字母、大写字母、数字、符号中的三种组成。
/**
* 匹配小数
* */
public static void regexsmallNum(String str){
System.out.println(str.matches("0\\.\\d+")||str.matches("[1-9]\\d*\\.\\d+"));
}
/**
* 匹配邮箱
* */
public static void regexEmail(String str){
System.out.println(str.matches("[0-9a-zA-Z]+_*[0-9a-zA-Z]*@[0-9a-zA-Z]+(\\.(com|cn)){1,2}"));
}
/**
* 密码匹配
* 6~12位 至少由 大写、小写、数字、空格中的三个
* */
public static boolean regexPassword(String str){
//判断参数是否为空
if(str ==null){
return false;
}
//判断密码位数
if(!str.matches(".{6,12}")){
return false;
}
int i = 0; // 记录字符种类
//判断是否含有小写字母
if(str.matches(".*[a-z].*")){
i++;
}
//判断是否出现大写字母
if(str.matches(".*[A-Z].*")){
i++;
}
//判断是否出现数字
if(str.matches(".*[0-9].*")){
i++;
}
//判断是否出现空格
if(str.matches(".*( ).*")){
i++;
}
//判断字符个数
if(i>2){
return true;
}
return false;
}
3. replaceAll("\d","-"); 将有数字替换为"-"
/**
* 记录字符串中每个字符出现的次数
* */
public static void printNum(String str){
int length = 0;
while(str.length()>0){
length = str.length();
char c = str.charAt(0);
str = str.replace(c+"", "");
System.out.println(c+":"+(length - str.length()));
}
}
补充: 二十四个常用正则表达式(摘自:http://www.jb51.net/article/34155.htm)
- 只能输入数字:"^[0-9]*$"。
- 只能输入n位的数字:"^\d{n}$"。
- 只能输入至少n位的数字:"^\d{n,}$"。
- 只能输入m~n位的数字:。"^\d{m,n}$"
- 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
- 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
- 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
- 只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
- 只能输入非零的负整数:"^\-[1-9][]0-9"*$。
- 只能输入长度为3的字符:"^.{3}$"。
- 只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
- 只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
- 只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
- 只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
- 只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
- 验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
- 验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
- 只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
- 验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
- 验证InternetURL:"^http://%28[/\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
- 验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
- 验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
- 验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
- 验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。