IOS之正則表達式

  在現階IOS開發的樣式越來越多,我們在開發APP的時候難免會遇到對用戶的登錄和註冊進行操作,但是登錄註冊如果想要做的人性化少不了的就是校驗,對當前用戶的登錄信息進行校驗,如果滿足要求我們會把用戶註冊的信息存入數據庫如果不滿足信息我們需要重新提示用戶輸入,涉及到校驗我們離不開的就是正則表達式,下面我們一起來學習一下IOS如何操作正則表達式。

  1、正則表達式的語法我們在這裏不詳細介紹,如果對這個不熟悉的可以參考網站:http://www.cnblogs.com/light169/archive/2006/10/18/532347.html

  2、下面我們簡單的定義一個正在表達式

 //正則表達式 匹配煙臺本地電話號碼
        NSString * pattern=@"^0535-\\d{6}$";
        
 //待匹配字符串
        NSString * str=@"0535-6062799";

  IOS中主要提供了兩種方式處理正則表達式,一種是block的形式,一種是非block的形式下面我們逐個使用一下:

  方式一:

//定義並且初始化一個NSRegularExpression對象
        NSRegularExpression * reg=[[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionDotMatchesLineSeparators error:nil];

在初始化方法中有一個options參數這個參數是一個枚舉類型,我們點擊去api如下:

  我們簡單翻譯一下

   NSRegularExpressionCaseInsensitive              //不區分字母大小寫的模式

   NSRegularExpressionAllowCommentsAndWhitespace  //忽略掉正則表達式中的空格和#號之後的字符

   NSRegularExpressionIgnoreMetacharacters        //將正則表達式整體作爲字符串處理

   NSRegularExpressionDotMatchesLineSeparators    //允許.匹配任何字符,包括換行符  

   NSRegularExpressionAnchorsMatchLines            //允許^和$符號匹配行的開頭和結尾

   NSRegularExpressionUseUnixLineSeparators        //設置\n爲唯一的行分隔符,否則所有的都有效。

   NSRegularExpressionUseUnicodeWordBoundaries     //使用Unicode TR#29標準作爲詞的邊界,否則所有傳統正則表達式的詞邊界都有效

//調用matchesInString 方法返回匹配數組
 NSArray * array= [reg matchesInString:str options:NSMatchingReportCompletion range:NSMakeRange(0, [str length])];

當前方法中也是有options選項,我們點擊去查看

  翻譯成中文

  NSMatchingReportProgress         = 1 << 0, //找到最長的匹配字符串後調用block回調

   NSMatchingReportCompletion       = 1 << 1, //找到任何一個匹配串後都回調一次block

   NSMatchingAnchored               = 1 << 2, //從匹配範圍的開始出進行極限匹配

   NSMatchingWithTransparentBounds  = 1 << 3, //允許匹配的範圍超出設置的範圍

   NSMatchingWithoutAnchoringBounds = 1 << 4  //禁止^和$自動匹配行還是和結束

 //數組裏面裝的是NSTextCheckingResult,我們將對象裏面匹配範圍打印出來,並且根據範圍截取字符串
for (NSTextCheckingResult * result in  array) {
            NSLog(@"%@",NSStringFromRange(result.range));
            NSString * s=[str substringWithRange:result.range];
            NSLog(@"%@",s);
        }

這樣我們就成功的講字符串匹配出來了。

方式二:block方式參數選項跟上面結束的第一種相同,用法如下:

 [reg enumerateMatchesInString:str options:NSMatchingReportCompletion range:NSMakeRange(0, [str length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
              NSLog(@"%@",NSStringFromRange(result.range));
              NSString * s=[str substringWithRange:result.range];
              NSLog(@"%@",s);
        }];

  方式三:我們已經現在已經可以匹配簡單的字符串了,但是我們在工作中有時候需要對字符串進行分割,例如字符串hello[你好]world[大家好]good,我們需要將字符串按照中文進行分割,要是實習這個功能我們藉助第三方會達到事半功倍的效果下面我們用第三方RegexKitLite來實現這個功能。

  1、我們定義正則表達式

//用來匹配中文

        NSString * pattern=@"\\[[\\u4E00-\\u9FA5]+\\]";

 //待匹配字符串

        NSString * str=@"[哈哈]hello[你好]world[嗎]good";

  2、將文件拖入項目

3、將該文件編譯改爲非arc

4、引入輔助庫

5、用法比較簡單,我們首先需要引入頭文件,然後直接調用如下方法即可

#import "RegexKitLite.h"
  //用來獲取分割後的字符串
  [str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
            NSLog(@"%@",*capturedStrings);
        }];

 //用來獲取匹配的字符串
        [str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
            NSLog(@"%@",*capturedStrings);
        }];

然後我們就可以開心的用正則表達式編程了。。

 

作者:傑瑞教育
出處:http://www.cnblogs.com/jerehedu/ 
本文版權歸煙臺傑瑞教育科技有限公司和CSDN共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 
發佈了166 篇原創文章 · 獲贊 47 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章