我可以通过哪些方式改进这种正则表达式?

时间:2012-08-02 20:43:22

标签: regex xcode replace

我写这个正则表达式是有效的,但老实说,这就像75%的猜测。

目标是:我在Xcode中有很多导入,如下所示:

#import <UIKit/UIKit.h>
#import "NSString+MultilineFontSize.h"

我只想返回包含+的类别。整个源代码中还有许多代码行,其中包括+在其他上下文中。

现在,这将返回整个Xcode项目中的所有正确行。但是,如果有一件事我通过谷歌搜索和搜索Stack Overflow来学习正则表达式教程,那就是有很多不同的方法可以做。我很乐意看到你们可以提出的所有不同的方式,使其更有效率或更加防止潜在的恶搞或失误。

^\#import+.[\"]*+.(?:(?!\+).)*+.*[\"]

提前感谢您的所有帮助。

更新

此外,我想我会接受使用最短字符串执行此操作的人的答案,而不会遗漏任何可能的恶搞。但同样,感谢参与这种学习体验的每个人。

来自答案的资源

这是从Dan Rasmussen练习正则表达式的一个很棒的资源:RegExr

2 个答案:

答案 0 :(得分:3)

我注意到的第一件事是+个字符放错地方:t+.匹配t一次或多次,后跟一个字符.。我假设您想匹配导入的结尾,后跟一个或多个任何字符:import.+

其次,#不需要转义。

以下是我提出的问题:^#import\s+(.*\+.*)$

\s+匹配一个或多个空格字符,因此您可以保证该行实际上以#import而不是#importbutnotreally或其他任何内容开头。

我不熟悉xcode语法,但表达式(.*\+.*)的以下部分只是匹配任何字符串} 中的+个字符串。这意味着可以匹配无效导入,但我假设您尝试匹配有效代码。如果没有,则需要修改它以验证导入器语法。


P.S。要测试您的表达方式,请尝试RegExr。您可以将鼠标悬停在字符上以查看它们的作用。

答案 1 :(得分:0)

sed 's:^#import \(.*[+].*\):\1:' FILE

将显示

"NSString+MultilineFontSize.h"

为您的样品。