正規表現を使用して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*)
ただし、最初の試みとは異なり、return型のないメソッドを検索します。でも、使われているのを見たことがないので大丈夫です。
- noReturnType
コメントやifについては何も知りませんが、1)たとえば数学演算子を使用するのは非常に難しく、2)メソッド自体も解析します。
今、私は質問を少し変更していますが、このようなキャプチャグループ出力を実現しようとしています。これは方法がわかりません。
1. -
2. void
FOLLOWING_CAN_REPEAT
3. setFoo:
4. Foo*
5. foo
END_REPEAT