2012-08-02 41 views
2

我写了这个正则表达式,但说实话,它就像75%的猜测。我可以通过哪些方式来改善这种正则表达式?

的目标是这样的:我有很多进口的Xcode中,像这样:

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

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

现在,这将返回整个Xcode项目中的所有适当的行。但是如果我从Google搜索中学到了一件事,并且在Stack Overflow中搜索正则表达式教程,那就是有很多不同的方式来做事情。我很乐意看到你们可以采取的所有不同的方式,这些方式可能会使潜在的欺骗或失误更有效或更加防弹。

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

在此先感谢您的帮助。

更新

而且我想我会接受谁做这个最短字符串的答案,不会错过任何可能的欺骗。但是,再次感谢参与这种学习体验的每个人。

从答案

这是从丹·拉斯穆森练正则表达式的真棒资源的资源:RegExr

+0

对于记录,最短的表达并不总是最好的... – dlras2 2012-08-02 21:14:30

+0

嗯,我总是可以让它投票haha – 2012-08-02 22:29:22

回答

3

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

其次,#不需要转义。

这就是我想出了:^#import\s+(.*\+.*)$

\s+匹配一个或多个空白字符,所以你保证该行实际上#import而不是#importbutnotreally或其他任何东西开始。

我不熟悉和Xcode语法,但表达,(.*\+.*)的以下部分,简单地匹配了+字符某处在它的任何字符串。这意味着无效导入可能会匹配,但我正在尝试匹配有效代码的假设下工作。如果不是,则需要修改以验证导入器语法。


P.S.要测试你的表情,试试RegExr。您可以将鼠标悬停在角色上以检查他们的功能。

+0

真棒链接。应该让学习这个东西更容易。 – 2012-08-02 20:58:54

+0

此外,你的正则表达式像一个魅力,发现所有完全相同的东西,我的感觉更好,我没有错过任何哈哈。感谢您的贡献。 – 2012-08-02 21:00:32

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

将显示

"NSString+MultilineFontSize.h" 

为您的样品。