2010-05-30 2 views
0

정규식을 사용하여 코드에서 중첩 된 여러 if 문을 검색 할 수 있습니까? 예를 들어정규식을 사용하여 여러 개의 중첩 된 If 문 찾기

의 인스턴스를 찾습니다되는식이 경우 깊은 다른 스타일을 가진 문 세 개 이상의 층 (있는 경우,/다른, 경우/ELSEIF/다른 경우) :

if (...) { 
    <code> 
    if (...) { 
     <code> 
     if (...) 
      <code> 
    } else if (...) { 
     <code> 
    } else { 
     <code> 
    } 
} else { 
    <code> 
} 
+0

정말하고 싶습니까? –

답변

3

regexes를 사용하여 소스 코드를 검색하는 것은 좋지 않습니다. IMO. 소스 코드를 파싱하는 도구를 사용하는 것이 더 좋으며, 예를 들어 XPath 스타일 경로 식을 사용하여 구문 분석 트리를 쿼리 할 수 ​​있습니다.

소스 코드 검색에 대한 정규식의 문제점은 정규 표현식 전문가가 아니라면 일반적으로 읽기 및 쓰기가 너무 어렵다는 것입니다. 정규식 (예 : 정규 표현식 전문가가 아닌 경우)이 잘못된 경우 창조자는 생각하지 않았다. (예를 들어, 키워드에 \ Uxxxx에 문자를 사용.)

는 몇 가지 도구 링크입니다 :

(. 다른 사람을 제안 해 주시기 바랍니다)

+0

오픈 소스 도구를 제안 해 주시겠습니까? 가급적 언어 범용. 또한, 왜 나쁜 생각입니까? – TERACytE

+0

@TERACytE - 나는 PMD가 찾는 것이 좋은 곳이라고 믿는다. –

+0

PMD는 Java 만 지원합니다. Yasca는 플러그인을 통해 여러 언어를 처리하는 것처럼 보이지만 regex를 사용하여 사용자 정의 플러그인을 만들 수 있습니다. – TERACytE

-3

시도 :

((if\(.+\)(\n)?.*\n|(else)?[ ]*(if\(.+\))?(\{)?(\n)*.*(\n)*(\})?){3}((if\(.+\)(\n)?.*\n|(else)?[ ]*if\(.+\)\{(\n)*.*(\n)*\})* 

약간 자세한 내용이지만 조건이있는 if 문과 선택적 중괄호로 구성된 3 개 이상의 문 또는 선택적 조건과 중괄호가있는 else if 문으로 구성됩니다.

+0

평소처럼 정규 표현식이 작동하지 않습니다. 문자열이나 주석 또는 "if"시퀀스가 포함 된 변수를 발견하면 실패합니다. regexes로 프로그래밍 언어를 파싱 할 수는 없습니다. –

1

않는 한, 나는이 대답을 명확하게 아니야 오해. 그 이유는 정규 표현식과 일치 할 수없는 언어 하위 집합에 대해 이야기하는 중첩 수준을 추적해야하는 경우입니다. 정규 표현식은 결정 성있는 유한 오토 마톤에서 캡처 한 것만 인식 할 수 있습니다. 이런 식으로하려면 스택이나 카운터를 사용하여 푸시 다운 오토 마톤이라고하는 좀 더 강력한 오토마타 클래스로 이동하십시오.