Xcode使用正则表达式替换

有时需要修改特定的字符,但是手动一个个修改太麻烦,而且你不知道他们在哪里。如果只是“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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值