我写这个正则表达式是有效的,但老实说,这就像75%的猜测。
目标是:我在Xcode中有很多导入,如下所示:
#import <UIKit/UIKit.h>
#import "NSString+MultilineFontSize.h"
我只想返回包含+
的类别。整个源代码中还有许多代码行,其中包括+
在其他上下文中。
现在,这将返回整个Xcode项目中的所有正确行。但是,如果有一件事我通过谷歌搜索和搜索Stack Overflow来学习正则表达式教程,那就是有很多不同的方法可以做。我很乐意看到你们可以提出的所有不同的方式,使其更有效率或更加防止潜在的恶搞或失误。
^\#import+.[\"]*+.(?:(?!\+).)*+.*[\"]
提前感谢您的所有帮助。
更新
此外,我想我会接受使用最短字符串执行此操作的人的答案,而不会遗漏任何可能的恶搞。但同样,感谢参与这种学习体验的每个人。
来自答案的资源
这是从Dan Rasmussen练习正则表达式的一个很棒的资源:RegExr
答案 0 :(得分:3)
我注意到的第一件事是+
个字符放错地方:t+.
匹配t
一次或多次,后跟一个字符.
。我假设您想匹配导入的结尾,后跟一个或多个任何字符:import.+
其次,#
不需要转义。
以下是我提出的问题:^#import\s+(.*\+.*)$
\s+
匹配一个或多个空格字符,因此您可以保证该行实际上以#import
而不是#importbutnotreally
或其他任何内容开头。
我不熟悉xcode语法,但表达式(.*\+.*)
的以下部分只是匹配任何字符串} 中的+
个字符串。这意味着可以匹配无效导入,但我假设您尝试匹配有效代码。如果没有,则需要修改它以验证导入器语法。
P.S。要测试您的表达方式,请尝试RegExr。您可以将鼠标悬停在字符上以查看它们的作用。
答案 1 :(得分:0)
sed 's:^#import \(.*[+].*\):\1:' FILE
将显示
"NSString+MultilineFontSize.h"
为您的样品。