正則表達式
3.1 正則表達式的作用
用於匹配字符串,比如匹配手機號碼,郵箱的格式
3.2 校驗QQ
方式一:未使用正則
/* 校驗qq號碼. 1:要求必須是5-15位數字 2:0不能開頭 3:必須都是數字*/ String qq = "10a101"; //1:要求必須是5-15位數字 if(qq.length() >=5 && qq.length() <= 15){ System.out.println("qq號的長度正確 "); //2: 0不能開頭 if(!qq.startsWith("0")){ //3.字符中是否有非數字字符 for(int i=0;i<qq.length();i++){ char ch = qq.charAt(i); if( !(ch >= '0' && ch <= '9')){ System.out.println("不合法字符:" + ch); } } }else{ System.out.println("qq號不能以0開頭"); } }else{ System.out.println("qq號碼的長度不正確"); } }
方式二:使用正則
//1.qq的正則 String regex = "[1-9]\\d{4,14}"; //2.打印匹配結果 System.out.println("1030103135".matches(regex)); System.out.println("01030103135".matches(regex)); System.out.println("1030".matches(regex)); System.out.println("1030103135111112".matches(regex)); System.out.println("10a30".matches(regex));
3.3正則表達式的構造摘要
字符類
[abc] a、b 或 c(簡單類)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(范圍)
[a-zA-Z_0-9] a 到 z 或 A 到 Z,_,0到9(范圍)
[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](減去)

預定義字符類
. 任何字符
\d 數字:[0-9]
\D 非數字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]

數量詞
X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過 m 次

3.4 正則表達式的分割功能
- public String[] split(String regex)
- 根據給定正則表達式的匹配拆分此字符串
/*String s = "11-23-21-20-28"; String[] arr = s.split("-"); for(String str : arr){ System.out.println(str); }*/ String s = "11.23.21.20.28"; /** * 如果是按.拆分,注意要添加轉義字符 */ String[] arr = s.split("\\."); for(String str : arr){ System.out.println(str); }
3.5 正則表達式的替換功能
- public String replaceAll(String regex,String replacement)
String s = "520 java 520 h5 520 c"; //把520都改成"我愛你" //s = s.replaceAll("\\d{3}", "我愛你"); s = s.replaceAll("520", "我愛你"); System.out.println(s);
3.6 Pattern和Matcher
正則的另一種寫法
// 檢驗QQ // boolean b1 = "101030".matches("[1-9]\\d{4,14}"); // System.out.println(b1); //等效於上面一行代碼 Pattern p = Pattern.compile("[1-9]\\d{4,14}");//正則 Matcher m = p.matcher("101030"); boolean b = m.matches(); System.out.println(b);
扣出手機字符串
String s = "我的手機是18988888888,我曾用過18987654321,還用過18812345678"; //Matcher 的find和group方法 //1.匹配手機正則表達(11位) String regex = "1[3789]\\d{9}"; //2.創建Pattern Pattern p = Pattern.compile(regex); //3.創建Matcher Matcher m = p.matcher(s); //4.找到匹配正則的內容 /* System.out.println(m.find()); System.out.println(m.group()); System.out.println(m.find()); System.out.println(m.group()); System.out.println(m.find()); System.out.println(m.group());*/ while(m.find()){ System.out.println(m.group()); }
