正則表達式在開發(fā)中是非常受歡迎的嫁佳,比如做一個手機號碼的判斷璃诀,用正則來判斷就很簡單了弧可,或者一個身份號碼的驗證,這些正則網(wǎng)上一搜一大堆劣欢,但是萬一哪一天移動出了一個新的號碼段呢棕诵,那你該怎么去修改呢裁良,所以還是得自己懂一些可以自己去修改就方便多了,今天看到了一篇簡書寫得挺好的校套,學習了一下感覺還是蠻簡單的价脾,原貼鏈接。
正則表達式的基礎語法:
1笛匙、^和$分別表示一個字符串的開始和結(jié)束
eg:
“^one”:表示所有以”one”開始的字符串("one cat"侨把,"one123",·····)
"a dog$":表示所以以"a dog"結(jié)尾的字符串("it is a dog"妹孙,·····)
"^apple$":表示開始和結(jié)尾都是"apple"的字符串
"banana":表示任何包含"banana"的字符串秋柄。
2 '*','+'和'?'這三個符號蠢正,表示一個或N個字符重復出現(xiàn)的次數(shù)骇笔。它們分別表示“沒有或更多”,“一次或更多”机隙,“沒有或一次”
eg:
"ab*" 這里表示b的個數(shù)可以無限多蜘拉,也可以沒有"a","abbbbbbbb"
"ab+" 表示b至少有一個, "ab" "abbbbbb"
"ab?" 只能表示"a"或者"ab"
3有鹿、大括號括起來({})旭旭,表示一個重復的具體范圍
eg:
"ab{4}" 則表示"abbbb"
"ab{1,}" 說明至少有一個b,也可以有多個
"ab{3,4}" a后面跟著3個或者4個b
4葱跋、| 或操作持寄,一般對象需要小括號包含
eg:
"(a|b)" 表示"a" 或 "b"
5、[] 表示區(qū)間 一般與“-”搭配使用 表示有在這個區(qū)間有一個字符 若沒有"-"則表示取[]里面的一個字符
eg:
[abcd] 表示abcd里面的一個字符
"[a-z]" 表示在a-z這個區(qū)間有一個字符
"[a-zA-Z]$" 表示以一個字母結(jié)尾
"[0-9]$" 表示以一個數(shù)字結(jié)尾
tips: [0-9] 等價于 \d 表示一個數(shù)字
[^0-9] 等價于\D 表示一個非數(shù)字的字符
[A-Za-z0-9_] 等價于“\w” 匹配包括下劃線的任何單詞字符
[^A-Za-z0-9_] 等價于 “\W” 匹配任何非單詞字符
6娱俺、"."匹配除"\r\n"之外的任何單個字符
eg:
"^.{5}$" 表示任意的5位字符
"a.[a-z]" 表示一個三位的字符
現(xiàn)在來寫一個關于中國移動的手機號碼的正則:
需求:
中國移動:China Mobile
134,135,136,137,138,139,147,150,151,152,157,158,159,170,178,182,183,184,187,188
看起來略微復雜,其實認真想一下還是比較的簡單的
"^1"都是1開頭的
第二位有3 4 5 7 8
"^1(3|4|5|7|8)"
第三位需要跟著第二位一起判定的
"^1(3[4-9]|47|5[127-9]|7[08]|8[2-478])"
前三位就搞定了稍味,然后寫上后8位數(shù)字
"^1(3[4-9]|47|5[127-9]|7[08]|8[2-478])\\d{8}$"
'\'(轉(zhuǎn)義字符)這樣一個簡單的正則表達式就寫好了。
在iOS中的運用:
NSString *CM = @"^1(3[4-9]|47|5[127-9]|7[08]|8[2-478])\\d{8}$";
NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
if([regextestcm evaluateWithObject:phoneString]){
return YES;
}