在Xcode中,替換操作是我們常用的優(yōu)化代碼的方法。如果只是“abc”改成“ABC”,那么很簡(jiǎn)單,直接改就可以了。但是如是比較復(fù)雜的,就得使用正則匹配了。
1.目標(biāo)的字符樣式是確定替換
實(shí)例(1)
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Wldh~Set~Complete" ofType:@"plist"];
將上述字符串中~Set~替換成-Config-,使用xcode的替換功能,操作如下:
正則:@"Wldh~(.*)~Complete"
替換:@"Wldh-Config-Complete"

實(shí)例(2):


將[MobClick beginLogPageView:@"MeViewController"]; ?修改為 [MobClick beginLogPageView:NSStringFromClass([self class])];
正則:
\[MobClick beginLogPageView:@"(.*)"\]
替換
[MobClick beginLogPageView:NSStringFromClass([self class])];
將 [MobClick endLogPageView:@"MeViewController"];修改為[MobClick?endLogPageView:NSStringFromClass([self class])];
正則:
\[MobClick endLogPageView:@"(.*)"\]
替換
[MobClick endLogPageView:NSStringFromClass([self class])];
實(shí)例(3)
去掉函數(shù)后面的大括號(hào)“{}”,將其替換為“;”
正則:\n\{\n(.*)\n\}
替換:;

2.目標(biāo)字符串是不確定的替換
比如手寫代碼是,偶爾忘記了將函數(shù)定義如下:

實(shí)例1:“-”與(void)之間沒(méi)有空格,你手動(dòng)去添加空格是是很麻煩的,這個(gè)用正則表達(dá)式替換就相當(dāng)簡(jiǎn)單了。(注冊(cè)括號(hào)需要添加“\”轉(zhuǎn)義操作符)
正則:-\(void\)(.*)
替換:- \(void\)$1

實(shí)例2:去掉某一行的下面一行
將下面的三行
#import "Wldh3GConfig.h"
#import "Wldh3GColorFont.h"
#import "VOIP3G-Swift.h"
變?yōu)橄旅娴膬尚?/p>
#import "Wldh3GConfig.h"
#import "Wldh3GColorFont.h"
正則
#import "VOIP(.*)-Swift.h"\n
替換(替換中為空即可)

實(shí)例3去掉.h文件后的兩行空格


正則
(.*).h"\n{2}
替換
$1.h"

3.分組查詢替換
1)正向肯定預(yù)查,在任何匹配pattern的字符串開(kāi)始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用
例如:“createLR(?=Observer|MainUI|NT)”能匹配“createMainUI”中的“create”,但不能匹配“createQQ”中的“create”。預(yù)查不消耗字符,也就是說(shuō),在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開(kāi)始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開(kāi)始

2)正向否定預(yù)查,在任何不匹配pattern的字符串開(kāi)始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用
例如:“create(?!Observer|MainUI|NT)”能匹配“createQQ”中的“create”,但不能匹配“createMainUI”中的“create”。預(yù)查不消耗字符,也就是說(shuō),在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開(kāi)始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開(kāi)始

3)反向否定預(yù)查,與正向否定預(yù)查類似,只是方向相反。
例如:“(?!Observer|MainUI|NT)create”能匹配“QQcreate”中的“create”,但不能匹配“MainUIcreate”中的“create”
實(shí)例1)將QRViewController替換成QRVC,但系統(tǒng)自定義的ViewController不被替換
排除rootViewController,initWithRootViewController,UIViewController,pushViewController,presentViewController,dismissViewController,popToRootViewController,destinationViewController,popViewController等開(kāi)頭,并且以.h,.m,空格結(jié)尾定義的類已經(jīng)應(yīng)用
正則:
(?<!root|initWithRoot|UI|push|present|dismiss|popToRoot|destination|pop|SKStoreProduct)ViewController(?=\.h|\.m|\s)
替換:VC
4.iOS語(yǔ)言國(guó)際化處理常用的替換
將?[HUD loadingWithMessage:@"正在獲取信息"];
修改為:[HUD loadingWithMessage:LocalString(@"正在獲取信息")];

正則
?:(@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?")
替換
:LocalString($1)
注意“:”是為了更好的獲取所要的文字
附錄:
