我正在尝试使用正则表达式解析 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