iOS正則表達式(NSRegularExpression)

正則表達式,又稱正規(guī)表示法常規(guī)表示法住拭。(英語:Regular Expression摇零,在代碼中常簡寫為regex、regexp或RE)沽甥,計算機科學的一個概念声邦。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則摆舟。在很多文本編輯器里亥曹,正則表達式通常被用來檢索、替換那些符合某個模式的文本恨诱。


先介紹個mac端的正則匹配測試軟件RegexTester提取碼密碼: dqgz媳瞪;或者用在線匹配.
在開始之前我們還是先來簡單了解了解正則表達式語法吧:
方括號:
方括號用于查找某個范圍內的字符:

Paste_Image.png

元字符
元字符(Metacharacter)是擁有特殊含義的字符:

Paste_Image.png

量詞

Paste_Image.png

常用的大概就是這些,如果想深入了解可以看看正則表達式教程


iOS中有三種實現(xiàn)正則表達式匹配的方法:

1照宝、NSPredicate(謂詞)匹配
    //手機號簡單匹配
    NSString *email = @"15173265865";
    NSString *regex = @"1[358][0-9]{9}" ;
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    BOOL isValid = [predicate evaluateWithObject:email];

2蛇受、NSString的API:rangeOfString:option:直接查找
    //手機號簡單匹配
    NSString *searchText = @"15173265865";
    NSString *regex = @"1[358][0-9]{9}" ;
    NSRange range = [searchText rangeOfString:regex options:NSRegularExpressionSearch];
    if (range.location != NSNotFound) {
        NSLog(@"%@", [searchText substringWithRange:range]);
    }
3、正則表達式專用類NSRegularExpression
    //手機號簡單匹配
    NSString *searchText = @"15173265865/18551410506";
    NSString *regexStr = @"1[358][0-9]{9}";
    NSError *error;
    NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:&error];
    if (error) return;
    NSInteger count = [regular numberOfMatchesInString:searchText options:NSMatchingReportCompletion range:NSMakeRange(0, searchText.length)];

    //當被檢索的字符串太大時厕鹃,用block控制查找
    NSString *searchText = @"15173265865";
    NSString *regex = @"1[358][0-9]{9}" ;
    
    NSError *error;
    NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:&error];
    if (error) return;
    
    [regular enumerateMatchesInString:searchText options:NSMatchingReportCompletion range:NSMakeRange(0, searchText.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
        NSRange matchRange = result.range;
        NSLog(@"range:%@",NSStringFromRange(matchRange));
        NSString *str = [searchText substringWithRange:matchRange];
        NSLog(@"%@",str);
    }];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末兢仰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剂碴,更是在濱河造成了極大的恐慌把将,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忆矛,死亡現(xiàn)場離奇詭異察蹲,居然都是意外死亡,警方通過查閱死者的電腦和手機洪碳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門递览,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞳腌,你說我怎么就攤上這事绞铃。” “怎么了嫂侍?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵儿捧,是天一觀的道長荚坞。 經常有香客問我,道長菲盾,這世上最難降的妖魔是什么颓影? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮懒鉴,結果婚禮上诡挂,老公的妹妹穿的比我還像新娘。我一直安慰自己临谱,他們只是感情好璃俗,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悉默,像睡著了一般城豁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抄课,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天唱星,我揣著相機與錄音,去河邊找鬼跟磨。 笑死间聊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的吱晒。 我是一名探鬼主播甸饱,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仑濒!你這毒婦竟也來了?” 一聲冷哼從身側響起偷遗,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤墩瞳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后氏豌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喉酌,經...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年泵喘,在試婚紗的時候發(fā)現(xiàn)自己被綠了泪电。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡纪铺,死狀恐怖相速,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情鲜锚,我是刑警寧澤突诬,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布苫拍,位于F島的核電站,受9級特大地震影響旺隙,放射性物質發(fā)生泄漏绒极。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一蔬捷、第九天 我趴在偏房一處隱蔽的房頂上張望垄提。 院中可真熱鬧,春花似錦周拐、人聲如沸塔淤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽高蜂。三九已至,卻和暖如春罕容,著一層夾襖步出監(jiān)牢的瞬間备恤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工锦秒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留露泊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓旅择,卻偏偏與公主長得像惭笑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子生真,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容