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),還需修行