2017-11-20 6 views
-1

ファイル内にメソッド定義のある行を見つけようとしています。 はたとえば、行は次のようになります。Javaメソッドの定義に一致する正規表現

// line has TAB indent public Stream<JsonNode> requestDifferences(List<Integer> commitIds) {

私が使用しようとしている正規表現は次のとおりです。

"^.+(!?if|while|for|catch|do|new|return).+\\(.*\\)\\s\\{$"

上記の例の行が正規表現にマッチします。しかし、匿名のクラス、条件、ループ、およびreturnステートメントを含むすべての文字列も、上の正規表現と正常に一致します。

この式で何が問題になっていますか?

+0

あなたの交替グループで単語がない行にマッチさせることを意図していたならば、それを '' ^(?:。* \\ b(? return)\\ b)。+ \\(。* \\)\\ s * \\ {$ "' - しかし、単一の正規表現でコードを解析することはお勧めできません。 –

+3

これに対する正規表現のアプローチは、道を傷つける可能性があります。代わりに実際のパーサーを使うことを考えてみましょう:http://javaparser.org/ – Henrik

+1

私は、単一の正規表現でコードを解析するという考え方が嫌いです。しかし、パブリック/プライベートタグを開始する行を探してみませんか?それは一致を大幅に減らします –

答えて

0

(もし|?!しばらく|新| |ください|キャッチ|のリターン)^。(公共\ S + |プライベート\ S + | \ S +保護)+ \ sの {$

。)

メソッド行のマッチングのためにこの正規表現を試してください。あなたはマッチラインが

に挿入したくない場合は(?!|中|新| |ください|キャッチ|のためならばリターン)

このブロック。

関連する問題