美文网首页swift学习之路
Xcode Regular Expression 正则表达式查找

Xcode Regular Expression 正则表达式查找

作者: 想见见你 | 来源:发表于2018-07-02 17:18 被阅读0次


    在Xcode中,替换操作是我们常用的优化代码的方法。如果只是“abc”改成“ABC”,那么很简单,直接改就可以了。但是如是比较复杂的,就得使用正则匹配了。

    1.目标的字符样式是确定替换

    实例(1)

    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Wldh~Set~Complete" ofType:@"plist"];

    将上述字符串中~Set~替换成-Config-,使用xcode的替换功能,操作如下:

    正则:@"Wldh~(.*)~Complete"

    替换:@"Wldh-Config-Complete"

    实例(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])];

    实例(3)

    去掉函数后面的大括号“{}”,将其替换为“;”

    正则:\n\{\n(.*)\n\}

    替换:;

    2.目标字符串是不确定的替换

    比如手写代码是,偶尔忘记了将函数定义如下:

    实例1:“-”与(void)之间没有空格,你手动去添加空格是是很麻烦的,这个用正则表达式替换就相当简单了。(注册括号需要添加“\”转义操作符

    正则:-\(void\)(.*)

    替换:- \(void\)$1

    实例2:去掉某一行的下面一行

    将下面的三行

    #import "Wldh3GConfig.h"

    #import "Wldh3GColorFont.h"

    #import "VOIP3G-Swift.h"

    变为下面的两行

    #import "Wldh3GConfig.h"

    #import "Wldh3GColorFont.h"

    正则

    #import "VOIP(.*)-Swift.h"\n

    替换(替换中为空即可)

    实例3去掉.h文件后的两行空格

    正则

    (.*).h"\n{2}

    替换

    $1.h"

    3.分组查询替换

    1)正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用

    例如:“createLR(?=Observer|MainUI|NT)”能匹配“createMainUI”中的“create”,但不能匹配“createQQ”中的“create”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

    2)正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用

    例如:“create(?!Observer|MainUI|NT)”能匹配“createQQ”中的“create”,但不能匹配“createMainUI”中的“create”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

    3)反向否定预查,与正向否定预查类似,只是方向相反。

    例如:“(?!Observer|MainUI|NT)create”能匹配“QQcreate”中的“create”,但不能匹配“MainUIcreate”中的“create”

    实例1)将QRViewController替换成QRVC,但系统自定义的ViewController不被替换

    排除rootViewController,initWithRootViewController,UIViewController,pushViewController,presentViewController,dismissViewController,popToRootViewController,destinationViewController,popViewController等开头,并且以.h,.m,空格结尾定义的类已经应用

    正则:

    (?<!root|initWithRoot|UI|push|present|dismiss|popToRoot|destination|pop|SKStoreProduct)ViewController(?=\.h|\.m|\s)

    替换:VC

    4.iOS语言国际化处理常用的替换

    将 [HUD loadingWithMessage:@"正在获取信息"];

    修改为:[HUD loadingWithMessage:LocalString(@"正在获取信息")];

    正则

     :(@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?")

    替换

    :LocalString($1)

    注意“:”是为了更好的获取所要的文字

    附录:

    相关文章

      网友评论

        本文标题:Xcode Regular Expression 正则表达式查找

        本文链接:https://www.haomeiwen.com/subject/uhyluftx.html