十分鐘學會基礎的正則表達式

正則表達式在開發中是非常受歡迎的,比如做一個手機號碼的判斷,用正則來判斷就很簡單了,或者一個身份號碼的驗證,這些正則網上一搜一大堆,但是萬一哪一天移動出了一個新的號碼段呢,那你該怎么去修改呢,所以還是得自己懂一些可以自己去修改就方便多了,今天看到了一篇簡書寫得挺好的,學習了一下感覺還是蠻簡單的,原貼鏈接
正則表達式的基礎語法:

 1、^和$分別表示一個字符串的開始和結束
    eg: 
        “^one”:表示所有以”one”開始的字符串("one cat","one123",·····)
        "a dog$":表示所以以"a dog"結尾的字符串("it is a dog",·····)
        "^apple$":表示開始和結尾都是"apple"的字符串
       "banana":表示任何包含"banana"的字符串。
 2 '*','+'和'?'這三個符號,表示一個或N個字符重復出現的次數。它們分別表示“沒有或更多”,“一次或更多”,“沒有或一次”
    eg:
        "ab*" 這里表示b的個數可以無限多,也可以沒有"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、[] 表示區間 一般與“-”搭配使用 表示有在這個區間有一個字符 若沒有"-"則表示取[]里面的一個字符
    eg: 
        [abcd] 表示abcd里面的一個字符
        "[a-z]" 表示在a-z這個區間有一個字符
        "[a-zA-Z]$" 表示以一個字母結尾
        "[0-9]$" 表示以一個數字結尾  
        tips: [0-9] 等價于 \d 表示一個數字
              [^0-9] 等價于\D 表示一個非數字的字符
              [A-Za-z0-9_] 等價于“\w” 匹配包括下劃線的任何單詞字符
              [^A-Za-z0-9_] 等價于 “\W” 匹配任何非單詞字符
 6、"."匹配除"\r\n"之外的任何單個字符
    eg:
        "^.{5}$" 表示任意的5位字符
        "a.[a-z]" 表示一個三位的字符

現在來寫一個關于中國移動的手機號碼的正則:
需求:
中國移動: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位數字
"^1(3[4-9]|47|5[127-9]|7[08]|8[2-478])\\d{8}$"
'\'(轉義字符)這樣一個簡單的正則表達式就寫好了。

在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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容