2014-12-08 2 views
0

내 프로그램에서 중괄호로 묶인 문자열을 반복적으로 검색하려고합니다. 즉, {example1 {example2}} {example3} {example4}이 주어지면 example1 {example2}, example3example4과 일치합니다. \{.+\}을 사용해 보았지만 example1 {example2}} {example3} {example4과 일치합니다. \{.+?\}example1 {example2, example3example4과 일치합니다. 정규식으로 또는 Java에서 단순히 원하는대로 할 수있는 쉬운 방법이 있습니까? 나는 당신이 아마 말할 수 있듯이 정규식에 정통하지 않습니다.중첩 된 문자열을 올바르게 정규 표현하는 방법

+1

정규식은이 용도로 사용되지 않으므로 분명히 가능합니다. 그러나 코드 작성은 절대적인 고통입니다. 그냥 문자열을 가로 지르고'{'와'} '의 수를 추적하십시오. – Keppil

+0

@AvinashRaj 이것은 대괄호가 균형을 이루는 지 확인하기보다는 문자열을 추출하려고하므로 중복되지 않습니다. –

+1

@Keppil, 실제로 그것이 내가 끝내었던 것이다. 놀랄만큼 작은 코드였다. –

답변

3

정규 표현식은 상태가 필요한 구문 분석에 적합하지 않습니다. 일부 시나리오에서는 작동하지만, 일반적인 경우를 처리 할 수있는 좋은 정규 표현식은 아닙니다.

문자열을 명시 적으로 구문 분석하는 것이 좋습니다. 기본적으로, 문자 하나씩 검색하고 다음 문자가

  • 경우 {은 "중첩 카운터를"증가한다. nesting counter==1 인 경우 새 그룹을 시작하고 다음 문자로 건너 뜁니다.

  • 숯이 } 인 경우 카운터를 줄입니다. nesting_counter == 0 인 경우 현재 그룹을 끝내고 다음 char로 건너 뜁니다.

  • nesting_counter>0 인 경우 그룹에 현재 문자를 추가하고 계속하십시오.

관련 문제