* A:字符类
- [abc] a、b 或 c(简单类)
- [^abc] 任何字符,除了 a、b 或 c(否定)
- [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
- [0-9] 0到9的字符都包括
- [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
- [a-z&&[def]] d、e 或 f(交集)
- [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
- [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
* B:预定义字符类
- . 任何字符。
- \d 数字:[0-9]
- \D 非数字: [^0-9]
- \s 空白字符:[ \t\n\x0B\f\r]
- \S 非空白字符:[^\s]
- \w 单词字符:[a-zA-Z_0-9]
- \W 非单词字符:[^\w]
* C:Greedy 数量词
- X? X,一次或一次也没有
- X* X,零次或多次
- X+ X,一次或多次
- X{n} X,恰好 n 次
- X{n,} X,至少 n 次
- X{n,m} X,至少 n 次,但是不超过 m 次
用法举例:
String regex = "\\W";// \表示转义字符,所以要在前面再写一个\
System.out.println("a".matches(regex));
正则表达式的分割功能:
String s = "金三胖.郭美美.李dayone";
String[] arr = s.split("\\."); //在正则表达式中.表示任意字符,需转义
// \\转义为\, \.转义为.
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
正则表达式的替换功能:
public class Demo6_ReplaceAll {
public static void main(String[] args) {
String s = "wo111ai222ni";
String regex = "\\d"; //\\d代表的是任意数字
String s2 = s.replaceAll(regex, "");
System.out.println(s2); //woaini
}
}
案例
/*
* 需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
将字符串还原成:“我要学编程”。
*/
String s = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";
String s2 = s.replaceAll("\\.+", "");
String s3 = s2.replaceAll("(.)\\1+", "$1"); //$1代表第一组中的内容
System.out.println(s3);//我要学编程
正则表达式的获取功能
String s = "我的手机是18511866260,我曾用过18987654321,还用过18812345678";
String regex = "1[3578]\\d{9}";//匹配手机号码
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while(m.find())
System.out.println(m.group());