RegexKitLite的基本使用,根據(jù)正則表達(dá)式獲取符合條件的字符串和其余字符串信息

iOS開(kāi)發(fā)中,經(jīng)常處理一些特殊字符串,比如新浪微博中,@他人的字符串會(huì)變成藍(lán)色,微信中電話(huà)號(hào)碼\網(wǎng)址\郵箱等可以變成藍(lán)色等等,這里就可以用RegexKitLite這個(gè)類(lèi)庫(kù)快速的得到一個(gè)字符串中特殊字符串的相關(guān)信息,進(jìn)而進(jìn)行各種操作,同樣可以用這個(gè)類(lèi)庫(kù)數(shù)實(shí)現(xiàn)圖文混排等操作

-----這篇文章沒(méi)有使用markdown的編輯模式,看著有點(diǎn)蛋疼,嘿嘿-----

1.前言

因?yàn)槠ヅ湟?guī)則是使用的正則表達(dá)式,所以這里對(duì)正則表達(dá)式不做過(guò)多了解,不會(huì)的找公司的后臺(tái)哥哥,前端哥哥什么的寫(xiě)一個(gè),或者百度下吧0.0 (大神無(wú)視)

2.導(dǎo)入類(lèi)庫(kù)

下載地址,首先我們下載下來(lái)就是一個(gè).h和一個(gè).m文件,廢話(huà)不多說(shuō)拖到自己的項(xiàng)目中,cmd+b編譯一下,wtf !?這么多錯(cuò)誤,原因就是這個(gè)類(lèi)庫(kù)采用的是mrc,解決如圖

來(lái)吧baby,cmd+b編譯起來(lái),wtf !?又報(bào)了幾十個(gè)錯(cuò)誤?這是因?yàn)檫@個(gè)類(lèi)庫(kù)對(duì)系統(tǒng)的類(lèi)庫(kù)有依賴(lài),加入如圖的庫(kù)依賴(lài)就ok了

3.基本使用

你會(huì)發(fā)現(xiàn)這個(gè)類(lèi)庫(kù)的實(shí)現(xiàn)文件2500+行代碼,所以我這里只是講解兩個(gè)我用到的方法,而且日常開(kāi)發(fā)應(yīng)該這兩個(gè)用的機(jī)會(huì)也比較大



- (BOOL)RKL_METHOD_PREPEND(enumerateStringsMatchedByRegex):(NSString *)regex usingBlock:(void (^)(NSInteger captureCount, NSString * const capturedStrings[captureCount], const NSRange capturedRanges[captureCount], volatile BOOL * const stop))block

- (BOOL)RKL_METHOD_PREPEND(enumerateStringsSeparatedByRegex):(NSString *)regex usingBlock:(void (^)(NSInteger captureCount, NSString * const capturedStrings[captureCount], const NSRange capturedRanges[captureCount], volatile BOOL * const stop))block

是不是這兩個(gè)方法很相似,我們看看具體的實(shí)現(xiàn),這是第一個(gè),這里可以遍歷出一個(gè)字符串中所有的根據(jù)指定正則表達(dá)式匹配出的特殊字符信息,包括個(gè)數(shù),文本,range

/**

*? 遍歷所有的特殊字符串

*? @param text ? ? ? ? ? ? ? ? ? 需要匹配字符串的文本

*? @param pattern ? ? ? ? ? ? ?正則表達(dá)式匹配規(guī)則(NSString類(lèi)型)

*? @param captureCount? ? 特殊字符串的個(gè)數(shù)

*? @param capturedStrings 特殊字符串

*? @param capturedRanges? 特殊字符串的range

*? @param stop? ? ? ? ? ? 沒(méi)啥用

*

*/

[text enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {

//這里需要注意,大家一起來(lái)數(shù)數(shù)這個(gè)block中星星的數(shù)量,沒(méi)錯(cuò),取值的時(shí)候如下面代碼

NSString * capturedString = *capturedStrings;

NSRange range = *capturedRanges;

}];

再來(lái)看看下一個(gè)方法,其實(shí)就相當(dāng)于這個(gè)方法的取反,遍歷出一個(gè)字符串中所有的根據(jù)指定正則表達(dá)式匹配出的特殊字符信息以外的字符串信息,包括個(gè)數(shù),文本,range (句子好長(zhǎng)有點(diǎn)繞...)

/**

*? 遍歷所有的非特殊字符

*? @param text? ? ? ? ? ? ? ? ? 需要匹配字符串的文本

*? @param pattern? ? ? ? ? ? ? 正則表達(dá)式匹配規(guī)則(NSString類(lèi)型)

*? @param captureCount? ? 非特殊字符串的個(gè)數(shù)

*? @param capturedStrings 非特殊字符串

*? @param capturedRanges? 非特殊字符串的range

*? @param stop? ? ? ? ? ? 沒(méi)啥用

*/

[text enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {

//這里的參數(shù)使用和上面方法一樣,需要加星號(hào)

}];

4.結(jié)束語(yǔ)

到這里這兩個(gè)方法的介紹基本就介紹完了,在這個(gè)block中,拿到這些特殊字符或者非特殊字符信息根據(jù)你們的需求盡情的玩耍吧

我是一個(gè)iOS小菜雞,總有一天我會(huì)成為一只雄鷹

旅途很長(zhǎng),還需修行

最后編輯于
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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