iOS/swift正則表達式

正則表達式對于很多程序猿并不陌生,但是很多初學(xué)者并不知道如何使用這個東西,所以在這里做個簡單的介紹,詳細教程請看傳送門
正則表達式30分鐘入門教程
  那么正則表達式有什么作用呢?其實正則表達式就是一個判斷語句,可以用來判斷字符串中是否含有某些特定的字符,并對所需的內(nèi)容進行截取.
表1.常用的元字符

代碼 說明
. 匹配除換行符以外的任意字符
\w 匹配字母或數(shù)字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數(shù)字
\b 匹配單詞的開始或結(jié)束
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束

比如當(dāng)有一個數(shù)組,我們要查找當(dāng)中是否有我們需要的元素(中國)時,在不用這則表達式的時候我們可以先將數(shù)據(jù)截取,然后查看里面是否有我們要的內(nèi)容

NSString *targetStr = @"中國";
NSString *nstring = @"美國,日本,澳大利亞,中國,俄羅斯";  
    NSArray *array = [nstring componentsSeparatedByString:@","];  
    for (int i = 0; i < [array count]; i++) {  
       if ([targetStr isEqualToString: [array objectAtIndex:i]]){
    NSLog(@"包含中國")
};  
    }  

那么在正則表達式下(由于\在oc中是轉(zhuǎn)義符,所以\b需要寫成\b)

 NSString *nstring = @"美國,日本,澳大利亞,中國,俄羅斯,中國龍,阿薩德中國";
//定義正則表達式
    NSString *pattern = @"\\b中國\\b";
    NSRegularExpression *regular = [[NSRegularExpression alloc]initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
    NSArray *results = [regular matchesInString:nstring options:0 range:NSMakeRange(0, nstring.length)];
//輸出截取結(jié)果
    NSLog(@"符合的結(jié)果有%ld個",results.count);
    for (NSTextCheckingResult *result in results) {
         NSLog(@"%@",[nstring substringWithRange:result.range]);
    }

在swift中的寫法

let nstring = "美國,日本,澳大利亞,中國,俄羅斯,中國龍,阿薩德中國";
        //定義正則表達式
        let pattern = "\\b中國\\b";
        let regular = try! NSRegularExpression(pattern: pattern, options:.CaseInsensitive)
let results = regular.matchesInString(nstring, options: .ReportProgress , range: NSMakeRange(0, nstring.characters.count))
        //輸出截取結(jié)果
        print("符合的結(jié)果有\(zhòng)(results.count)個")
        for result in results {
            print((nstring as NSString).substringWithRange(result.range))
            

當(dāng)然正則表達式的作用是非常強大的,當(dāng)我們需要判斷用戶的密碼是否以字母開頭,設(shè)置是否符合我們的要求(密碼位數(shù),組合等)以及截取網(wǎng)絡(luò)地址IP都可以使用正則表達式幾行代碼進行判斷,而不用在寫那么又臭又長的if語句來判斷了

常用的正則表達式:
網(wǎng)上一搜一大堆,不過剛發(fā)現(xiàn)好多都是錯的,特別是IP判斷等......所以小伙伴們使用的時候請謹(jǐn)慎.今天沒時間了,后續(xù)我會把整理的發(fā)上來.

其他常用的語法:
表2.常用的限定符

代碼/語法 說明
* 重復(fù)零次或更多次
+ 重復(fù)一次或更多次
? 重復(fù)零次或一次
{n} 重復(fù)n次
{n,} 重復(fù)n次或更多次
{n,m} 重復(fù)n到m次

表3.常用的反義代碼

代碼/語法 說明
\W 匹配任意不是字母,數(shù)字,下劃線,漢字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數(shù)字的字符
\B 匹配不是單詞開頭或結(jié)束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字符

表4.常用分組語法

分類 代碼/語法 說明
捕獲 (exp) 匹配exp,并捕獲文本到自動命名的組里
捕獲 (?<name>exp) 匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp)
捕獲 (?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號
零寬斷言 (?=exp) 匹配exp前面的位置
零寬斷言 (?<=exp) 匹配exp后面的位置
零寬斷言 (?!exp) 匹配后面跟的不是exp的位置
零寬斷言 (?<!exp) 匹配前面不是exp的位置
注釋 (?#comment) 這種類型的分組不對正則表達式的處理產(chǎn)生任何影響,用于提供注釋讓人閱讀

表5.懶惰限定符

代碼/語法 說明
*? 重復(fù)任意次,但盡可能少重復(fù)
+? 重復(fù)1次或更多次,但盡可能少重復(fù)
?? 重復(fù)0次或1次,但盡可能少重復(fù)
{n,m}? 重復(fù)n到m次,但盡可能少重復(fù)
{n,}? 重復(fù)n次以上,但盡可能少重復(fù)

表6.常用的處理選項

名稱 說明
IgnoreCase(忽略大小寫) 匹配時不區(qū)分大小寫。
Multiline(多行模式) 更改^和$的含義,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個字符串的開頭和結(jié)尾匹配。(在此模式下,$的精確含意是:匹配\n之前的位置以及字符串結(jié)束前的位置.)
Singleline(單行模式) 更改.的含義,使它與每一個字符匹配(包括換行符\n)。
IgnorePatternWhitespace(忽略空白) 忽略表達式中的非轉(zhuǎn)義空白并啟用由#標(biāo)記的注釋。
ExplicitCapture(顯式捕獲) 僅捕獲已被顯式命名的組。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數(shù)字,標(biāo)點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,282評論 0 9
  • 注:本篇文章只為方便查看,特此保留,如有冒犯,敬請諒解?。?! 本文目標(biāo) 30分鐘內(nèi)讓你明白正則表達式是什么,并對它...
    阿杰Alex閱讀 1,562評論 0 10
  • 版本:v2.3.5 (2017-6-12) 作者:deerchao 轉(zhuǎn)載請注明來源 目錄 跳過目錄 本文目標(biāo) 如何...
    readilen閱讀 1,118評論 2 13
  • 概述 正則表達式是一種描述字符串結(jié)果的語法規(guī)則,是一個特定的格式化模式,可以匹配、替換、截取匹配的字符串。常用的語...
    醉于麥田閱讀 556評論 0 0
  • 我是在一個偏遠地區(qū)上大學(xué)的人,說偏遠還不太恰當(dāng)因為我原來的家鄉(xiāng)是一個在地圖上都找不到的地方,更諷刺的是,我的家鄉(xiāng)...
    我餓了2355666閱讀 216評論 0 1

友情鏈接更多精彩內(nèi)容