2

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

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

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

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

现在,这将返回整个 Xcode 项目中所有正确的行。但是,如果我从谷歌搜索和在 Stack Overflow 中搜索正则表达式教程中学到了一件事,那就是有很多不同的方法来做事。我很想看到你们可以想出的所有不同方法,使其在潜在的欺骗或失误方面更有效或更防弹。

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

提前感谢您的所有帮助。

更新

另外我想我会接受用最短字符串执行此操作的人的答案,而不会错过任何可能的恶搞。但再次感谢所有参与此学习体验的人。

来自答案的资源

这是 Dan Rasmussen 练习正则表达式的绝佳资源:RegExr

4

2 回答 2

3

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

其次,#不需要逃避。

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

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

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


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

于 2012-08-02T20:52:42.757 回答
0
sed 's:^#import \(.*[+].*\):\1:' FILE

将显示

"NSString+MultilineFontSize.h"

为您的样品。

于 2012-08-02T21:12:29.953 回答