ファイル内にメソッド定義のある行を見つけようとしています。 はたとえば、行は次のようになります。Javaメソッドの定義に一致する正規表現
// line has TAB indent public Stream<JsonNode> requestDifferences(List<Integer> commitIds) {
私が使用しようとしている正規表現は次のとおりです。
"^.+(!?if|while|for|catch|do|new|return).+\\(.*\\)\\s\\{$"
上記の例の行が正規表現にマッチします。しかし、匿名のクラス、条件、ループ、およびreturnステートメントを含むすべての文字列も、上の正規表現と正常に一致します。
この式で何が問題になっていますか?
あなたの交替グループで単語がない行にマッチさせることを意図していたならば、それを '' ^(?:。* \\ b(? return)\\ b)。+ \\(。* \\)\\ s * \\ {$ "' - しかし、単一の正規表現でコードを解析することはお勧めできません。 –
これに対する正規表現のアプローチは、道を傷つける可能性があります。代わりに実際のパーサーを使うことを考えてみましょう:http://javaparser.org/ – Henrik
私は、単一の正規表現でコードを解析するという考え方が嫌いです。しかし、パブリック/プライベートタグを開始する行を探してみませんか?それは一致を大幅に減らします –