你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發中正則表達式的基礎使用

iOS開發中正則表達式的基礎使用

編輯:IOS開發綜合

正則表達式?什麼是正則表達式?
百度百科給出的解釋是這樣的:正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。
根據我的學習,我理解的正則表達式是:一個字符串,這個字符串用來描述我們所制定的規則。

學習正則表達式,就好像學習一門新的語言,只是這種語言是用來制定規則的。學習一門新語言,我們一般從helloworld開始。
例如我們在要一個很長的字符串中找到hellowrold,那麼我們就可以使用正則表達式 helloworld 。helloworld這個正則表達式是最簡單類型的正則表達式了,它會匹配這樣的字符串:按著helloworld這樣的順序排列的字符串。

這裡介紹一下正則表達式中的一些特殊代碼,也叫做元字符(metacharacter)。在我看來,這些元字符類似我們OC語言中的關鍵字。(當然正則表達式的與字符肯定不止這麼點,但一下的我覺得已經夠我們開發使用的了)

\b:代表著單詞的開頭或結尾,作為單詞的分界處。
例如:正則表達式 h i會匹配到包含有 hi 這兩個連續字母的單詞,像history、him。而如果加上\b,是正則表達式變成這樣 \bhi\b那麼就只會匹配到 hi 這個單詞

. (英語中的句號): 匹配除了換行符以外的任意字符。
例如:正則表達式 \ba.\b(\b是代表單詞開頭或結束的元字符,上面已經介紹) 匹配以 前面一個是字符a,後面是一個除換行符意外的任意字符的字符串,像aa、ab、a_、a+ 這些都可以匹配到

\d:匹配一個數字(0-9)
例如:正則表達式 0\d\d\d\d\9 匹配以0開都,以9結尾的一串6個數字的數字串,中間的四個數字可以是0到9中任意的數字,像056789、043629等等

\w:匹配字母或數字或下劃線或漢字
例如:正則表達式 \w\w\w\w 匹配任意的四個字母或數字或下劃線或漢字,像中文中的成語:十動然拒、普大喜奔 這種類型的,或者是:main、void 這種四個字母的單詞,或者是:5_a、壕b6 這種雜交的類型

\s:匹配任意的空白字符(上面說了這麼多,這個沒什麼好說的了,應該挺好理解的把)

ps:上面的介紹的元字符是用來匹配特殊的格式或者字符的,而下面的幾個則用來匹配數量的

*(星號) :重復零次或多次
例如:正則表達式 a\d
匹配以字符a開頭的,後面跟著0個或者多個數字的字符串:a、a1、a94803748 這些都是該正則表達式匹配的字符串;

+:重復1次或多次
例如:正則表達式 a\d+ 匹配的是以字符a開頭的,後面跟著1個或多個數字的字符串:a3、a5856306 ,但是不能匹配 a 應為+代表最少要有一個;

?:重復0次或1次
和上面兩個類似,表達式 a\d? 匹配的是以字符a開頭的,後面跟著0個或一個數字的字符串:a、a5、a9

{n}:重復n次
例如:我們的身份證號,一般來說是18位的數字(實際上身份證的驗證要復雜得多,這裡只是舉個栗子),那麼我們可以寫這麼一個正則表達式來匹配它:\d{18} ,又例如我們銀行卡的取款密碼,一般來說是6位的數字,那麼我們就可以寫:\d{6} 這樣的正則表達式來匹配。

{n,}:重復n次或更多次(即最少都要重復n次)
例如:現在很多網站的賬號注冊時,密碼都要求不少於多少個數,那麼我們就可以這麼寫:\d{6,} ,這是不少於6位的數字

{n,m}:重復n到m次(最少重復n次,最多重復m次)
例如:QQ的賬號要求是5到12位, 那麼可以用正則表達式:\d{5,12} 來匹配

好了,以上介紹到得元字符基本上可以滿足我們開發要求了。

接著還有幾點是要注意的:
[]的使用:

[abcdef] 這個正則表達式匹配abcdef中其中一個字母,[.?!]這個正則表達式匹配裡面三個標點符號中的其中一個。我們也可以用來指定一個范圍,[0-9]匹配0到9這段區間中任意一個數字(包括0和9)。[a-z]這裡就是匹配a到z這段區間其中一個字母。我們還可以這幾個范圍連在一起使用,比如[0-9a-zA-Z]就是匹配 0到9、a到z、A到Z 這三個區間的其中一個區間的其中一個字符或數字。

分支條件:有時候,當我們要制定的規則有多種形式的時候,所以我們需要一個“或”符號來連接兩種形式。
舉個栗子:我們的電話號碼可以用兩種形式表示:020-88888888 (020)88888888。要讓讓這兩種形式的寫法都可以匹配,我們就要寫兩種形式的正則表達式,匹配020-88888888 的正則表達式可以寫為:0\d{2}-\d{8};匹配(020)88888888的正則表達式我們可以寫成:(0\d{2})\d{8}。如果要使這兩個正則表達式一起匹配一個字符串,那麼就要用到“或”符號來連接他們了:0\d{2}-\d{8}|(0\d{2})\d{8} 。
ps:其他語言我不是很清楚,但是OC中“|”運算符是判斷前面一個表達式,如果前面一個表達式是“true”的話,後面的運算就不會繼續進行下去了,而正則表達式的“|”運算符也是一樣的,只要前面的表達式是ture得話,就不會繼續判斷下面的運算了。比如說:\d{3}|\d{3}-\d{4} 這個正則表達式,因為前面的\d{3}部分和後面\d{3}部分一樣,當字符串 111-11匹配時候只會匹配到前面的三位,後面的“-11”都是匹配不到的。如果你還沒有打算向iOS以外的方向發展,我建議這個作為了解就好了。

分組:
這個比較容易,就是用圓括號對“()”將其中某些語句括起來作為一個整體。
例如:[a-zA-Z0-9]+@[a-zA-Z0-9]+(.[a-zA-Z0-9]{2,4}){1,2} 這個是一個不完善的郵箱匹配的正則表達式,式子後面部分“(.[a-zA-Z0-9]{2,4}){1,2}” 可以看到,圓括號括起來的部分“.[a-zA-Z0-9]{2,4})”這裡表示他們是一個整體,後面的“{1,2}”重復1或者兩次,是相對於圓括號這個整體來說的。整個正則表達式匹配像這樣的郵箱:[email protected] 或者匹配這樣的:[email protected] 這樣的郵箱(雖然我不知道這個郵箱後綴是否存在,但是這些都不是重點)。

到這裡,我們可以來看2個例子,印證一下上面所講的東西:---------------------------------
(\d{1,3}.){3}\d{1,3}:是一個簡單的IP地址匹配表達式。要理解這個表達式,請按下列順序分析它:\d{1,3}匹配1到3位的數字,(\d{1,3}.){3}匹配三位數字加上一個英文句號(這個整體也就是這個分組)重復3次,最後再加上一個一到三位的數字(\d{1,3})。(這個正則表達式其實並不准確,准確的IP地址描述是這樣的:((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?))

(?0\d{2})?[- ]?\d{8}|0\d{2}[- ]?\d{8}這個表達式匹配3位區號的電話號碼,其中區號可以用小括號括起來,也可以不用,區號與本地號間可以用連字號或空格間隔,也可以沒有間隔。
如果上面兩個例子,你可以自己分析出來,那麼基本上夠了。如果你想了解更多的有關正則表達式的知識,這裡已經幫不到你了,但是度娘肯定對你有幫助。http://www.jb51.net/tools/zhengze.html 而我自己的話是在這個網址了解的,有興趣可以去看一下。
最後差點忘了,還有一點:字符轉移的
如果你想查找元字符本身的話,比如你查找.,或者*,就出現了問題:你沒辦法指定它們,因為它們會被解釋成別的意思。這時你就得使用\來取消這些字符的特殊意義。因此,你應該使用.和*。當然,要查找\本身,你也得用\.
例如:deerchao.net匹配deerchao.net,C:\Windows匹配C:\Windows。
====================華麗的分割線=======================割割割==========
好了,說了這麼多,都是正則表達式的內用,那麼接下來我們還是看一下在Xcode中使這些正則表達式為我所用呢
首先介紹一下我的運行環境: 硬件:mac筆記本 系統:OS X Yosemite 10.10.4 軟件:Xcode6.4
為了方便查看,我布局了一個頁面:(這次我用QQ號的正則表達式來做測試)

iOS開發中正則表達式的基礎使用 - 浪奇八寶粥 - I can see

布局代碼我相信大家都會寫,所以這裡就不貼了 。下面是點擊藍色button的監聽事件的代碼:

pragma mark - 監聽btn的點擊事件

- (void)btnOnClick
{
    //將正則表達式作為字符串賦值給變量regex
    NSString *regex = @"\\d{5,12}";

    //根據正則表達式將NSPredicate的格式設置好
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    //判斷正則表達式能否正確匹配_textFiedld.text的內容
    BOOL isMatch = [pred evaluateWithObject:_textField.text];

    //顯示匹配結果
    if (isMatch) {
        _lab.text = @"匹配成功";
    } else {
        _lab.text = @"匹配失敗";
    }
}

運行結果如下:

iOS開發中正則表達式的基礎使用 - 浪奇八寶粥 - I can see
iOS開發中正則表達式的基礎使用 - 浪奇八寶粥 - I can see

[圖片上傳中。。。(4)]

截圖中已經給出了解釋,能不能理解就見仁見智了!

文章到此就進入尾聲了,以上所有只是個人學習的理解,如果有錯,還望指正



文/langlangago(簡書作者)
原文鏈接:http://www.jianshu.com/p/94bd7327f735
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved