iOS利用正則表達(dá)式得到所有符合條件的字符串所處的范圍

還是上次的@效果,要從一串字符串中匹配出符合條件(以@開頭且為車牌號(hào))的字符串。
首先根據(jù)條件寫個(gè)正則:

NSString *carNumberPattern = @"[@]{1}[\u4E00-\u9FA5]{1}[A-Z]{1}[A-Z_0-9]{5}";

然后就用到了iOS自帶的NSRegularExpression這個(gè)類去解析這個(gè)正則表達(dá)式,類方法快速創(chuàng)建對(duì)象:

+ (nullable NSRegularExpression *)regularExpressionWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error;

第一個(gè)參數(shù)不用說就是要解析的正則表達(dá)式,第二個(gè)參數(shù)作用如下:

typedef NS_OPTIONS(NSUInteger, NSRegularExpressionOptions) {  
NSRegularExpressionCaseInsensitive             = 1 << 0, //不區(qū)分字母大小寫的模式   
NSRegularExpressionAllowCommentsAndWhitespace  = 1 << 1, //忽略掉正則表達(dá)式中的空格和#號(hào)之后的字符   
NSRegularExpressionIgnoreMetacharacters        = 1 << 2, //將正則表達(dá)式整體作為字符串處理   
NSRegularExpressionDotMatchesLineSeparators    = 1 << 3, //允許.匹配任何字符,包括換行符     
NSRegularExpressionAnchorsMatchLines           = 1 << 4, //允許^和$符號(hào)匹配行的開頭和結(jié)尾   
NSRegularExpressionUseUnixLineSeparators       = 1 << 5, //設(shè)置\n為唯一的行分隔符,否則所有的都有效。   
NSRegularExpressionUseUnicodeWordBoundaries    = 1 << 6 //使用Unicode TR#29標(biāo)準(zhǔn)作為詞的邊界,否則所有傳統(tǒng)正則表達(dá)式的詞邊界都有效
};

因?yàn)檐嚺铺?hào)中沒有小寫字母,所以操作選項(xiàng)不能選第一個(gè):

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:carNumberPattern options:NSRegularExpressionDotMatchesLineSeparators error:&error ];

這個(gè)對(duì)象有下面幾個(gè)方法可以獲取到符合條件的信息:

- (NSArray<NSTextCheckingResult *> *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;//返回所有匹配結(jié)果的數(shù)組
- (NSUInteger)numberOfMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;//返回所有匹配結(jié)果的個(gè)數(shù)
- (nullable NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;//返回第一個(gè)匹配結(jié)果
- (NSRange)rangeOfFirstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;//返回第一個(gè)匹配結(jié)果的range

因?yàn)榭赡苡卸鄠€(gè)@,所以用第一個(gè)方法。這個(gè)方法返回了一個(gè)裝有NSTextCheckingResult對(duì)象的數(shù)組,NSTextCheckingResult對(duì)象有一個(gè)range屬性,記錄了它所處的范圍。注:這個(gè)中的元素順序是倒序排列的,例如第一個(gè)符合條件的結(jié)果放在了數(shù)組的最末尾??梢栽诘玫絩ange之后按location進(jìn)行一次升序排列。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,689評(píng)論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,806評(píng)論 18 399
  • 我遇到過這么一個(gè)她,她不是很漂亮但讓人看著很舒服。她不淑女,有時(shí)會(huì)滿嘴臟話卻有時(shí)又傲嬌的讓人心疼。不會(huì)關(guān)心人或者...
    寒小閱讀 5,319評(píng)論 0 4
  • 棧是什么? 任務(wù)棧Task,是用來放置activity的地方,即執(zhí)行特定任務(wù)時(shí)與用戶交互的一系列activity,...
    青春_放肆了驕傲閱讀 381評(píng)論 1 1
  • 活潑的小雨點(diǎn),怎么能不小心跳躍到車窗上,被雨刷器無情的刮掉! 喜歡秋天的小雨,就這樣一直淅淅瀝瀝的,不急躁,不張揚(yáng)...
    宋振宇閱讀 319評(píng)論 0 0

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