正则表达式的使用
String中的matches方法是告知此字符串是否匹配给定的正则表达式。
String中的split方法是按正则表达式来进行切割。
String中的replaceAll方法是按正则表达式来进行替换的。
正则表达式中的预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9] 注:这里的字符都只是代表后面的意思,真正用的时候还要在前面加上\,才能用来匹配。
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
注意:任何预定义字符没有加上数量词之前都只能匹配一个字符而已。
使用实例:
System.out.println("任意字符:" + ("%".matches(".")));
System.out.println("数字字符:" + ("1".matches("\\d")));
System.out.println("非数字字符:" + ("@".matches("\\D")));
System.out.println("空白字符:" + ("\r".matches("\\s")));
System.out.println("非空白字符:" + ("\n".matches("\\S")));
System.out.println("单词字符:" + ("a".matches("\\w")));
System.out.println("非单词字符:" + ("@".matches("\\W")));
正则表达式中的数量词
Greedy 数量词
X? 表示X出现一次或一次也没有
X* 表示X出现零次或多次
X+ 表示X出现一次或多次
X{n} 表示X出现恰好 n 次
X{n,} 表示X出现至少 n 次
X{n,m} 表示X出现至少 n 次,但是不超过 m 次
使用实例:
System.out.println("?一次或一次也没有:" + ("".matches("\\d?")));
System.out.println("* 零次或多次:" + ("123".matches("\\d*")));
System.out.println("+ 至少出现一次:" + ("1".matches("\\d+")));
System.out.println("{次数} 恰好出现n次:" + ("12345678911".matches("\\d{11}")));
System.out.println("{次数,} 至少要出现指定的次数:" + ("124".matches("\\d{3,}")));
System.out.println("{次数1,次数2} 指定出现次数的范围:" + ("1242".matches("\\d{3,4}")));
正则表达式中的范围词
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) 其实和[a-dm-p]一样道理
[a-z&&[def]] d、e 或 f(交集)
注意:范围词里面不管内容有多长,没有数量词的配合都只能匹配一个字符而已。
使用实例:
System.out.println("d".matches("[abc]"));
System.out.println("@".matches("[^abc]"));
System.out.println("字符可以出现在a-z之间:"+("#".matches("[a-z0-9]")));