iOS中正則表達(dá)式的運(yùn)用示例代碼
前言
有時(shí)我們需要在一大段長(zhǎng)文本中過(guò)濾出我們需要的字段,或者檢驗(yàn)該文本是否符合要求(該文本是否是郵箱,鏈接,電話號(hào)碼或身份證),這時(shí)候就需要用到正則表達(dá)式了,iOS中也加入了相關(guān)的類來(lái)支持正則表達(dá)式的使用。本文詳細(xì)介紹了關(guān)于iOS正則表達(dá)式運(yùn)用的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
一、NSRegularExpression
1. 正則表達(dá)式的創(chuàng)建
+ (nullable NSRegularExpression *)regularExpressionWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error; - (nullable instancetype)initWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error
該類中的屬性
- pattern 返回正則表達(dá)式模式
- options 返回創(chuàng)建正則表達(dá)式選項(xiàng)時(shí)使用的選項(xiàng)
- numberOfCaptureGroups 返回正則表達(dá)式模式
options 定義的枚舉類型如下:
typedef NS_OPTIONS(NSUInteger, NSRegularExpressionOptions) {
NSRegularExpressionCaseInsensitive = 1 << 0, //不區(qū)分大小寫(xiě)的
NSRegularExpressionAllowCommentsAndWhitespace = 1 << 1, //忽略空格和# -
NSRegularExpressionIgnoreMetacharacters = 1 << 2, //整體化
NSRegularExpressionDotMatchesLineSeparators = 1 << 3, //匹配任何字符,包括行分隔符
NSRegularExpressionAnchorsMatchLines = 1 << 4, //允許^和$在匹配的開(kāi)始和結(jié)束行
NSRegularExpressionUseUnixLineSeparators = 1 << 5, //(查找范圍為整個(gè)無(wú)效)
NSRegularExpressionUseUnicodeWordBoundaries = 1 << 6 //(查找范圍為整個(gè)無(wú)效)
};
2. 搜索字符串
//枚舉允許Block處理每個(gè)正則表達(dá)式匹配的字符串 - (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (NS_NOESCAPE ^)(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL *stop))block; //返回一個(gè)數(shù)組,包含字符串中正則表達(dá)式的所有匹配項(xiàng) - (NSArray<NSTextCheckingResult *> *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range; //返回字符串指定范圍內(nèi)匹配數(shù) - (NSUInteger)numberOfMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range; //返回字符串指定范圍內(nèi)第一個(gè)匹配項(xiàng)。 - (nullable NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range; //返回字符串指定范圍內(nèi)第一個(gè)匹配的范圍 - (NSRange)rangeOfFirstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;
NSMatchingOptions的定義如下:
typedef NS_OPTIONS(NSUInteger, NSMatchingOptions) {
NSMatchingReportProgress = 1 << 0, /* 在長(zhǎng)時(shí)間運(yùn)行的匹配操作中定期調(diào)用Block */
NSMatchingReportCompletion = 1 << 1, /* 完成任何匹配后,調(diào)用Block一次*/
NSMatchingAnchored = 1 << 2, /*指定匹配僅限于搜索范圍開(kāi)始時(shí)的匹配 */
NSMatchingWithTransparentBounds = 1 << 3, /* 定匹配可以檢查超出搜索范圍的范圍的字符串的部分,以用于諸如字邊界檢測(cè),前瞻等。如果搜索范圍包含整個(gè)字符串,該常量將不起作用 */
NSMatchingWithoutAnchoringBounds = 1 << 4 /* 指定^并且$不會(huì)自動(dòng)匹配搜索范圍的開(kāi)始和結(jié)束,但仍將與整個(gè)字符串的開(kāi)頭和結(jié)尾相匹配。如果搜索范圍包含整個(gè)字符串,則該常量不起作用 */
};
3.替換字符串
//返回與模板字符串替換的匹配正則表達(dá)式的新字符串 - (NSString *)stringByReplacingMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range withTemplate:(NSString *)templ; //返回替換的個(gè)數(shù) - (NSUInteger)replaceMatchesInString:(NSMutableString *)string options:(NSMatchingOptions)options range:(NSRange)range withTemplate:(NSString *)templ; //自定義替換功能 - (NSString *)replacementStringForResult:(NSTextCheckingResult *)result inString:(NSString *)string offset:(NSInteger)offset template:(NSString *)templ; //通過(guò)根據(jù)需要添加反斜杠轉(zhuǎn)義來(lái)返回模板字符串,以保護(hù)符合模式元字符的任何字符 + (NSString *)escapedTemplateForString:(NSString *)string;
使用示例
NSString *str = @"aabbcccdeaargdo14141214aaghfh56821d3gad4";
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"aa" options:NSRegularExpressionCaseInsensitive error:NULL];
if (expression != nil) {
//匹配到的第一組
NSTextCheckingResult *firstMatch = [expression firstMatchInString:str options:NSMatchingReportProgress range:NSMakeRange(0, str.length)];
NSRange range = [firstMatch rangeAtIndex:0];
NSString *result = [str substringWithRange:range];
NSLog(@"匹配到的第一組:%@",result);
//匹配到的個(gè)數(shù)
NSInteger number = [expression numberOfMatchesInString:str options:NSMatchingReportProgress range:NSMakeRange(0, str.length)];
NSLog(@"匹配到的個(gè)數(shù)%ld",number);
//配到到的所有數(shù)據(jù)
NSArray *allMatch = [expression matchesInString:str options:NSMatchingReportProgress range:NSMakeRange(0, str.length)];
for (int i = 0; i < allMatch.count; i ++) {
NSTextCheckingResult *matchItem = allMatch[i];
NSRange range = [matchItem rangeAtIndex:0];
NSString *result = [str substringWithRange:range];
NSLog(@"匹配到的數(shù)據(jù):%@",result);
}
//匹配到第一組的位置
NSRange firstRange = [expression rangeOfFirstMatchInString:str options:NSMatchingReportProgress range:NSMakeRange(0, str.length)];
NSLog(@"匹配到第一組的位置:開(kāi)始位置%lu--長(zhǎng)度%lu",(unsigned long)firstRange.location,(unsigned long)firstRange.length);
//替換字符串
NSString *resultStr = [expression stringByReplacingMatchesInString:str options:NSMatchingReportProgress range:NSMakeRange(0, str.length) withTemplate:@"bbbb"];
NSLog(@"替換后的字符串:%@",resultStr);
NSInteger resultNum = [expression replaceMatchesInString:[str mutableCopy] options:NSMatchingReportProgress range:NSMakeRange(0, str.length) withTemplate:@"bbbb"];
NSLog(@"替換的個(gè)數(shù);%ld",(long)resultNum);
}
打印log:
2017-08-13 23:28:53.898 NSRegularExpressionDemo[82046:8220904] 匹配到的第一組:aa
NSRegularExpressionDemo[82046:8220904] 匹配到的個(gè)數(shù)3
NSRegularExpressionDemo[82046:8220904] 匹配到的數(shù)據(jù):aa
NSRegularExpressionDemo[82046:8220904] 匹配到的數(shù)據(jù):aa
NSRegularExpressionDemo[82046:8220904] 匹配到的數(shù)據(jù):aa
NSRegularExpressionDemo[82046:8220904] 匹配到第一組的位置:開(kāi)始位置0--長(zhǎng)度2
NSRegularExpressionDemo[82046:8220904] 替換后的字符串:bbbbbbcccdebbbbrgdo14141214bbbbghfh56821d3gad4
NSRegularExpressionDemo[82046:8220904] 替換的個(gè)數(shù);3
二、字符串
//NSStringCompareOptions --> NSRegularExpressionSearch - (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask; - (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)rangeOfReceiverToSearch; - (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)rangeOfReceiverToSearch locale:(nullable NSLocale *)locale
從上面的api可以看出,只能匹配到第一組
使用示例
NSString *str = @"aabbcccdeaargdo14141214aaghfh56821d3gad4"; NSRange strMatchStr = [str rangeOfString:@"aa" options:NSRegularExpressionSearch]; NSLog(@"匹配到字符串的位置:開(kāi)始位置%lu--長(zhǎng)度%lu",(unsigned long)strMatchStr.location,(unsigned long)strMatchStr.length) 打印log: NSRegularExpressionDemo[82080:8224265] 匹配到字符串的位置:開(kāi)始位置0--長(zhǎng)度2
三、謂詞
使用示例
NSString *str2 = @"aabbcc"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"^aa(.)*cc$"]; BOOL isMatch = [predicate evaluateWithObject:str2]; NSLog(@"匹配的結(jié)果:%d",isMatch); 打印log: NSRegularExpressionDemo[82679:8253019] 匹配的結(jié)果:1
四、正則表達(dá)式
可以參考這篇文章:http://www.dhdzp.com/article/73342.htm
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- IOS中用正則表達(dá)式判斷輸入的內(nèi)容為8-16位且同時(shí)包含數(shù)字和字母
- iOS中常見(jiàn)正則表達(dá)式驗(yàn)證方法
- 淺談iOS應(yīng)用中的相關(guān)正則及驗(yàn)證
- iOS 正則表達(dá)式判斷手機(jī)號(hào)碼、固話
- iOS 正則表達(dá)式判斷純數(shù)字及匹配11位手機(jī)號(hào)碼的方法
- IOS正則表達(dá)式判斷輸入類型(整理)
- iOS開(kāi)發(fā)驗(yàn)證判斷語(yǔ)句之正則表達(dá)式小結(jié)
- iOS開(kāi)發(fā) 正則運(yùn)算詳細(xì)介紹
- iOS 正則表達(dá)式詳解
- IOS開(kāi)發(fā)常用的正則表達(dá)式
- iOS中使用正則表達(dá)式NSRegularExpression 來(lái)驗(yàn)證textfiled輸入的內(nèi)容
- IOS中NSPredicate和NSRegularExpression校驗(yàn)正則表達(dá)式區(qū)別
相關(guān)文章
iOS之Https自簽名證書(shū)認(rèn)證及數(shù)據(jù)請(qǐng)求的封裝原理
本篇文章主要介紹了iOS之Https自簽名證書(shū)認(rèn)證及數(shù)據(jù)請(qǐng)求的封裝原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
iOS Swift開(kāi)發(fā)之日歷插件開(kāi)發(fā)示例
本篇文章主要介紹了iOS Swift開(kāi)發(fā)之日歷插件開(kāi)發(fā)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
簡(jiǎn)單介紹iOS開(kāi)發(fā)中關(guān)于category的應(yīng)用
這篇文章主要介紹了iOS開(kāi)發(fā)中關(guān)于category的應(yīng)用,代碼仍然基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-09-09
iOS如何實(shí)現(xiàn)強(qiáng)制轉(zhuǎn)屏、強(qiáng)制橫屏和強(qiáng)制豎屏的實(shí)例代碼
本篇文章主要介紹了iOS如何實(shí)現(xiàn)強(qiáng)制轉(zhuǎn)屏、強(qiáng)制橫屏和強(qiáng)制豎屏的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
IOS開(kāi)發(fā)筆記整理49之詳解定位CLLocation
在項(xiàng)目功能中有一個(gè)定位CLLocation的需求,遇到了一些知識(shí)難點(diǎn),經(jīng)過(guò)各位大俠的幫助,問(wèn)題解決,特此分享供大家學(xué)習(xí),希望大家共同學(xué)習(xí)進(jìn)步2015-11-11
iOS 超級(jí)簽名之描述文件的實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了iOS 超級(jí)簽名實(shí)現(xiàn)之描述文件的實(shí)現(xiàn)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
IOS-MVC層讀取服務(wù)器接口JSON數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了IOS-MVC層讀取服務(wù)器接口JSON數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
iOS中FMDB數(shù)據(jù)庫(kù)之增刪改查使用實(shí)例
本篇文章主要介紹了iOS中FMDB數(shù)據(jù)庫(kù)之增刪改查使用實(shí)例,F(xiàn)MDB是一個(gè)輕量級(jí)的數(shù)據(jù)庫(kù),用于將網(wǎng)絡(luò)資源存儲(chǔ)在本地。2017-05-05

