Objective c 用正则表达式解析Obj-c方法

Objective c 用正则表达式解析Obj-c方法,objective-c,regex,parsing,methods,Objective C,Regex,Parsing,Methods,我试图用正则表达式解析Obj-c源代码。我想找到声明和实现 首先,我寻找这样的类: @implementation(.|\n)+@end @interface(.|\n)+@end 然后,我有这些模式用于在类的范围内查找实例方法: For interface: -.*; For implementation: -.*{ 但是,注释、字符串和数学运算也包括在内 这些模式失败的示例: //I'm pretending to-be an instance method; /* D

我试图用正则表达式解析Obj-c源代码。我想找到声明和实现

首先,我寻找这样的类:

@implementation(.|\n)+@end

@interface(.|\n)+@end
然后,我有这些模式用于在类的范围内查找实例方法:

For interface:       -.*;
For implementation:  -.*{
但是,注释、字符串和数学运算也包括在内

这些模式失败的示例:

//I'm pretending to-be an instance method;

/*
Disabled methods:
- (void)myProgrammerDidntLikeMe;
*/

if (a + b == 2) { ... }
str = @"-----";
我怎样才能使模式排除这些假装的方法,还有什么我没有预见到的吗

更新:在尝试解析单个方法字符串时,我注意到我的模式也能识别它们。这就是我想到的:

(-|\+)\s\(([\w|\*|\s]*)\)(?:(?:(?:(\w*)(?:\:\([\w|\s|\*]*)\)(\w*)\s*){1,}))?(\w*)
但是,与我第一次尝试查找没有返回类型的方法不同,它没有。但我没意见,因为我从来没见过有人用过

- noReturnType
我对注释和ifs一无所知,但1)它更难愚弄例如数学运算符,2)它还解析方法本身

现在我对我的问题进行了一些修改,但我正试图实现这样的捕获组输出,我不知道如何实现

1. -
2. void
FOLLOWING_CAN_REPEAT
3. setFoo:
4. Foo*
5. foo
END_REPEAT

如果您想可靠地执行此操作,则不能使用正则表达式

你打算怎么办?宏?头文件?人们一直在吸取这个教训:正则表达式不能用于可靠地处理计算机语言


如果你不介意偶尔犯错,你已经有了一个可行的解决方案(有点);你可以把它修补到你的心坎上,它会有所改进,但总有一个根本性的缺陷

我会使用类似or的东西,再加上Objective-C语言语法,来创建一个高效的C源解析器,我可以挂接到它。

如果你想可靠地完成这项工作,你不能使用正则表达式。你打算怎么办?宏?头文件?人们一直在吸取这个教训:正则表达式不能用于可靠地处理计算机语言。如果你不介意偶尔犯错误,你已经有了一个有效的解决方案(有点);你可以把它修补到你的心坎上,它会有所改进,但总有一个根本性的缺陷。如果你需要一个真正的Objective C解析器,我有另一个答案:“我正试图用正则表达式解析Obj-C源代码。”这听起来是个坏主意。你确定这是最好的选择吗?关于用正则表达式解析代码的一些建议:(我最喜欢的SO问题)。@IraBaxter谢谢!你说得对,regex可能不是最好的选择,我真正想要的是一个真正的objc解析器。我已经决定为此创建一个新问题:@JohannesLund遗留头包括它们,因为objc的第一个版本不支持返回类型。它们在协议中也很有用,在协议中,您不关心从方法返回什么。它们也可以作为泛型的一种形式使用,但充其量也很挑剔。