2017-11-20 10 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 (? : if | while | for | catch | do | new | return) \\ b). + \\ (. * \\) \\ s * \\ {$ "'- 그러나 단일 정규식으로 코드를 구문 분석하는 것은 좋지 않습니다. –

+3

이것에 대한 정규식 접근 방식은 어려움을 겪을 수 있습니다. 대신 실제 파서를 사용하는 것을 고려하십시오. http://javaparser.org/ – Henrik

+1

하나의 정규식으로 코드를 파싱하는 아이디어가 마음에 들지 않습니다. 그러나 공개/비공개 태그를 시작하는 라인을 검색하는 것이 어떻습니까? 일치를 크게 줄일 수 있습니다. –

답변

0

(있는 경우 |?! 잠시 | 잡기 | | 할 | 새 | 반환)^(공공 \ S + | 개인 \ S + | \ S + 보호). +가 (. 가) \ s에 {$

메소드 행 일치에 대해이 정규 표현식을 사용하십시오. 당신이 매치 라인이

에 삽입하지 않으려면 (있는 경우 |?! 잠시 |에 대한 | 캐치 | 수행 | 새 | 귀국일)

이 블록.