Xcode Regular Expression 正則表達(dá)式查找替換


在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)

注意“:”是為了更好的獲取所要的文字


附錄:

最后編輯于
?著作權(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)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評(píng)論 19 139
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,262評(píng)論 8 265
  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識(shí)依舊是別人的,自己卻什么都沒(méi)獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,259評(píng)論 0 20
  • 今天偶然間看到簡(jiǎn)書 被這個(gè)名字給吸引的 我喜歡一切簡(jiǎn)單的東西 太復(fù)雜的不適合我 我也是一個(gè)不太喜歡動(dòng)腦的大媽 喜歡...
    楠木的lost閱讀 223評(píng)論 0 1
  • 昨晚咳到睡不了覺(jué),做了個(gè)夢(mèng),能到前男友回來(lái)找我,我不答應(yīng),我還是清楚自己的內(nèi)心,無(wú)論他對(duì)我有多么好,和他都是過(guò)去式...
    賴向陽(yáng)閱讀 244評(píng)論 0 0

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