我正在尝试用正则表达式解析Obj-c源代码。我想找到声明和实现。
首先,我寻找这样的课程:
@implementation(.|\n)+@end
@interface(.|\n)+@end
然后我有这些模式在类的范围内找到 instance-methods :
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