我在类里面的几个地方都有以下函数调用。
[myClass doOperationOne];
[myClass doOperationTwo];
[myClass doOperationThree];
在这些行中,我想搜索以下内容,
[myClass doOperationOne
[myClass doOperationTwo
[myClass doOperationThree
并将它们替换为以下内容,(通过附加 WithOptions:[Permissions isOptionsAvailable]
)
[myClass doOperationOneWithOptions:[Permissions isOptionsAvailable]];
[myClass doOperationTwoWithOptions:[Permissions isOptionsAvailable]];
[myClass doOperationThreeWithOptions:[Permissions isOptionsAvailable]];
如何使用单个正则表达式查找/替换来做到这一点?
最佳答案
注意: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 或更早版本上,则交换)
注意:这里写的所有内容都适用于 NSString
中的字符串替换方法。/NSMutableString
使用 NSRegularExpressionSearch
时!
换句话说,这一行:
[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
用一个空的完成 block 替换它并保留动画值:
(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( 并且在 ); 中省略了 ) 之后进行了拆分。在第三 block 中,它从删除 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 东西同时匹配“强”和“保留”。
关于iphone - 使用正则表达式在 Xcode 中查找/替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4778847/