iphone - 使用正则表达式在 Xcode 中查找/替换

标签 iphone ios objective-c xcode

我在类里面的几个地方都有以下函数调用。

[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/

相关文章:

ios - 为动态创建的 UIPickerView 添加协议(protocol)

ios - 在两个图像之间绘制和更新线

iphone - 如何在iPhone应用程序中呈现分层数据?

iphone - 如何正确插入背景图片

ios - 将多个类的方法组合到一个类中

ios - 在 posix 线程上创建自动释放池

iphone - 为什么我的 CGContext 绘制的圆很糟糕?

jquery - iPhone 上的菜单滚动

ios - 嵌套 UITableView 不返回任何单元格

javascript - 我如何获取当前显示在 WebView 上的 html 内容?