注意:Xcode 6 中的行为发生了变化。\123 语法被替换为 $123。另请注意,换行现在可以在 reg exps 中匹配,因此请务必在 Replace-Alling 之前略读
为方法添加额外的参数:
替换
[* setFoo:*]
与
[* setFoo:* bar:value]
你会的
(setFoo:)(.*)(\])
$1$2 bar:value]
(分别搜索字符串和替换字符串)。
或者,如果在 Xcode 5 或更早版本上
(setFoo:)(.*)(\])
\1\2 bar:value]
(以下使用新语法;如果在 Xcode 5 或更早版本上,则交换)
注意:这里写的所有内容都适用于使用NSRegularExpressionSearch时NSString/NSMutableString中的字符串替换方法!
换句话说,这一行:
[input replaceOccurrencesOfString:@"\n\\[([^\\]^\n]*)\\]\n"
withString:@"\n///\n\n[$1]\n"
options:NSRegularExpressionSearch
range:(NSRange){0,input.length}];
将所有"[...]\n" 序列(例如"[...\n..." 单独!)转换为"\n///\n\n[...]\n",使用$1 保留...。
总是手动执行此操作,但在这种情况下,我添加了一个 OPTIONAL 'animate:' 标志,到目前为止的默认设置是 YES,但我想要 NO,因此每次调用都必须更新。
更多示例:
不推荐使用的方法 (iOS)
dismissModalViewControllerAnimated:... 弃用
要修复已弃用的dismissModalViewController,将其替换为空的完成块并保留动画值:
(dismissModalViewControllerAnimated:)(.*)(\])
dismissViewControllerAnimated:$2 completion:nil]
presentModalViewController:animated: 弃用
(presentModalViewController:)(.*)( animated:)(.*)(\])
presentViewController:$2$3$4 completion:nil]
杂项
PD...释放 → PD...销毁
我最近写了一个 c 库,其中包含一堆前缀为 PD 的文件,我使用 Create/Release 作为 malloc/free 关键字,我很遗憾这可能会让人们认为保留计数被保留,所以我想重命名PD<anything>Release( 和 PD<anything>Destroy(。
([\n\r ])(PD)(.*)Release\(
$1$2$3Destroy(
由于 Core Graphics 有 CGPDFDocumentRelease 和类似的,我必须确保单词 开始 也是 PD。
PDAssert(PDScannerPop...(...));
我愚蠢地在功能代码周围放置了断言,当 !#ifdef DEBUG 时这些断言将变为空。幸运的是,我知道所有这些都以 PDAssert(PDScannerPop.... 并以 ); 结尾。
(PDAssert\()(PDScannerPop)(.*)(\);)
$2$3;
这里没有 1 美元,因为那将再次包含 PDAssert(。请注意,我已经在 PDAssert( 并且在 ); 中省略了 ) 之后进行了拆分。在第三块中,它从删除 PDAssert(.
中删除了多余的括号
处理结束括号
您可以匹配除“)”之外的所有内容来处理过度贪婪的正则表达式替换。示例:
foo(replace(arg), bar)
foo(newvalue(newarg), bar)
使用replace\((.*)\) 将获取replace(arg), bar),结果将是foo(newvalue(newarg)!而是使用 replace\(([^\)]*)\),它将抓住 replace(arg) 并留下 , bar)。
将一堆 NSString 属性从使用保留和/或强(以及其他任何东西)转换为使用复制
@property \(([^\)]*)[sr][te][rt][oa][ni][gn]([^\)]*)\)(.*)NSString(.*)
@property ($1copy$2)$3NSString$4
中间那个奇怪的 sr te rt 东西同时匹配“强”和“保留”。