第十六次總結 正則表示式
- 什麼是正則表示式?
- 正則表示式的字元?
- 預定義的字元?
- 字元的數量詞?
- 懶惰性數量詞和貪婪性數量詞?
- 驗證一個手機號碼是不是合法的?
驗證中國的座機號碼是不是合法的?
區號-電話號
0731-88888888
0730-7777777
010-11111111
1.什麼是正則表示式?
1.正則表示式就是一個字串
是一個用來對字串進行處理的一個特殊的字串
可以簡化字串的處理
匹配 equals matches
擷取 substring
替換 replace
切割 split
2.正則表示式的組成
a.字元 必須
b.數量 可選
2.正則表示式的字元?
任何一個字元都可以是正則表示式的字元
[abc] 表示一個字元,a或者b或者c
(b|d|rt) 表示一組字元 b或者的或者rt
[a-z] 表示任意一個小寫字母
[A-Z] 表示任意一個大寫字母
[0-9] 表示任意一個數字
[1-5] 表示1~5這5個數字中的某一個
[a-zA-Z0-9] 表示所有的字母和數字中的某一個
[a-m&&[h-z]] 等價於[h-m]
[^bcd] 除開abcd以外的所有字元中的一個
[ae-z]
[a-zA-Z_0-9] 所有的單詞字元
3.預定義的字元?
. 一個任意字元
\d 數字,等價於[0-9]
\D 非數字等價於[^0-9]
\w 所有的單詞字元,等價於[a-zA-Z_0-9]
\W 非單詞字元
\s 空白字元 空格 \t \r \n
\S 非空白字元
4.字元的數量詞?
用來表示字元要出現的次數
{5,10} 表示最少5次,最多10次
{5,} 表示最少5次,無上限
{5} 表示必須5次
? 表示0次或一次
* 表示0次或多次
+ 表示1次或多次
案例
x[abc]{5,10}y
x[abc]?y 可以匹配 xay xby xcy xy
可以匹配 xabcabcy
x[abc]*y 可以匹配 xy
可以匹配 xabcabcy
5.懶惰性數量詞和貪婪性數量詞?
{5,10}? 5個到10個,但儘可能少
?? 0個或者1個,但儘可能少
*? 0個或者多個,但儘可能少
+? 1個或者多個,但儘可能少
{5,10}+ 5個到10個,但儘可能多
?+ 0個或者1個,但儘可能多
*+ 0個或者多個,但儘可能多
++ 1個或者多個,但儘可能多
6.驗證一個手機號碼是不是合法的?
驗證中國的座機號碼是不是合法的?
區號-電話號
0731-88888888
0730-7777777
010-11111111
/** * 正則表示式 */ public class Demo { public static void main(String[] args) { //座機號碼 String number = "0731-11111111"; sptel(number); //手機號碼 String telNunber = "17369299863"; tel(telNunber); } /** * 驗證中國的座機號碼是不是合法的 * * @param number 電話號碼 */ public static void sptel(String number) { String regex = "(\\w{3,4}|010)-\\d{7,8}"; System.out.println(number.matches(regex)); } /** * 驗證一個手機號碼是不是合法的 * * @param telNunber 手機號碼 */ public static void tel(String telNunber) { String regex = "1[^012]\\d{9}"; boolean l = telNunber.matches(regex); System.out.println(l); } }