100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Xcode使用正则表达式替换

Xcode使用正则表达式替换

时间:2019-01-13 18:10:13

相关推荐

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。