美文网首页IOS
Xcode使用正则表达式替换

Xcode使用正则表达式替换

作者: FindCrt | 来源:发表于2017-05-28 03:13 被阅读1064次

    有时需要修改特定的字符,但是手动一个个修改太麻烦,而且你不知道他们在哪里。如果只是“xxx”改成“yyy”,那么很简单,直接改就可以了。但是如是比较复杂的,就得使用正则匹配了。比如:

    NSString *path = [NSString stringWithFormat:@"%@_%@",homeDir,file];
    

    现在有100条这个的代码,现在要把拼接字符从"_"改成"::"。

    那么使用xcode的替换功能,首先把模式改成替换+正则

    单文件替换
    多文件替换

    单文件和多文件替换都有正则模式。

    例如上面的例子,正则可以使用\[NSString stringWithFormat:@"%@(.*)%@",替换文字为:[NSString stringWithFormat:@"%@::%@"

    使用 $1

    上面的例子简单在于,目标的字符样式是确定的,而有些时候,目标类型却是跟随替换字符变化的

    比如接口的头文件,一开始是这样定义的:

    #define host        @"https://xxx"
    
    #define login   @"/login"
    #define register    @"/register"
    

    即每个接口只有后半部分,并没有和主地址拼接成为真正有效的URL,这样使用接口的时候,每次都得做拼接的操作,所以我希望在每个接口是已经和host拼接过的,也就是变成:

    #define host        @"https://xxx"
    
    #define login   [host stringByAppendingString:@"/login"]
    #define register    [host stringByAppendingString:@"/register"]
    

    这时候正则怎么写?

    • 正则: #define (.*)@"(.*)"$
    • 替换字符:#define $1[host stringByAppendingString:@"$2"]

    难点在于,对于每个接口,[host stringByAppendingString:xxx里面的xxx内容部分是不一样的,它是需要从你匹配的字符里面去获取的。

    所以其实$1$2的意思已经很明显了,就是被匹配到的字符串里面的被匹配子串。那哪些是子串,我测试的结果,就是放在括号里的那些,有没有其他写法我不知道,但括号里的匹配为一个子串是可以确定的。因为正则里使用了2个括号,所以第一个就是$1,第二个就是$2

    #define login @"/login",第一个子串匹配为.*即,任何字符任何长度,匹配login,所以$1就是login。同样的,$2就是/login

    用好这个,批量改代码就不再那么头痛了,特别是接手项目整改的时候-_-

    相关文章

      网友评论

        本文标题:Xcode使用正则表达式替换

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