国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS中正則表達(dá)式的運(yùn)用示例代碼

2019-10-21 18:44:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

有時(shí)我們需要在一大段長(zhǎng)文本中過(guò)濾出我們需要的字段,或者檢驗(yàn)該文本是否符合要求(該文本是否是郵箱,鏈接,電話號(hào)碼或身份證),這時(shí)候就需要用到正則表達(dá)式了,iOS中也加入了相關(guān)的類(lèi)來(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

該類(lèi)中的屬性

  • pattern 返回正則表達(dá)式模式
  • options 返回創(chuàng)建正則表達(dá)式選項(xiàng)時(shí)使用的選項(xiàng)
  • numberOfCaptureGroups 返回正則表達(dá)式模式

options 定義的枚舉類(lèi)型如下:

 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] 匹配到的第一組:aaNSRegularExpressionDemo[82046:8220904] 匹配到的個(gè)數(shù)3NSRegularExpressionDemo[82046:8220904] 匹配到的數(shù)據(jù):aaNSRegularExpressionDemo[82046:8220904] 匹配到的數(shù)據(jù):aaNSRegularExpressionDemo[82046:8220904] 匹配到的數(shù)據(jù):aaNSRegularExpressionDemo[82046:8220904] 匹配到第一組的位置:開(kāi)始位置0--長(zhǎng)度2NSRegularExpressionDemo[82046:8220904] 替換后的字符串:bbbbbbcccdebbbbrgdo14141214bbbbghfh56821d3gad4NSRegularExpressionDemo[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á)式

 

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到IOS開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 昭平县| 渭南市| 呼玛县| 綦江县| 柯坪县| 宁安市| 永平县| 涡阳县| 电白县| 昔阳县| 井陉县| 泾川县| 石柱| 拜城县| 尼玛县| 威远县| 德化县| 甘谷县| 巫溪县| 澎湖县| 安化县| 吉木乃县| 淮阳县| 巴塘县| 康马县| 民勤县| 久治县| 石景山区| 翁牛特旗| 手机| 孟津县| 沙坪坝区| 元江| 彭州市| 黑龙江省| 大港区| 东至县| 新乡市| 宜都市| 井研县| 灵山县|