2012-06-07 2 views
1

저는 정규식을 처음 접했고 검색에만 사용합니다. 그래서 나는 egrep을 가지고 놀았지만, egrep에서는 몇 가지 한계가있다.정규식에서 C 코드의 괄호를 검사하는 정규식

리눅스의 경우 정규식을위한 훌륭한 도구가 있습니까? 나는 sed가 있지만 일반적으로 검색 및 대체 시나리오에 사용된다는 것을 알고 있습니다. 내 파일을 검색 할 때만 sed를 사용할 수 있습니까? 그렇다면 어떻게?

내 구체적인 질문이 있는데, C 소스 코드에서 if 문에 추가 괄호가 사용되는 인스턴스를 검색해야합니다.

if ((a == b))은 일치해야하며 if (a == b)은 일치하지 않아야합니다.
if(a && ((b||c)))은 일치해야하고 if(a && (b||c))은 일치하지 않아야합니다.

나는 그들이 임의의 수준을 추적 할 수 없기 때문에 이것은, (적어도 자신에 대한) 정규 표현식에 불가능 나중에 >=!=

+4

괄호 중첩의 임의의 수준을 추적 할 수 없기 때문에 (적어도 자체적으로는 아니지만) 정규식에서는 불가능합니다. –

+0

왜 아래로 투표 ?? 음 ... – Kamath

+0

@Oli Charlesworth, 답변을 작성해야합니다. * 대답입니다. –

답변

5

같은 추가 사례를 추가 할 것입니다, 간단되고 싶어요 괄호의 중첩.

+2

이 답변에 추가하려면 regex 외부에서도 조심해야합니다. 진정으로 "불필요한"괄호 세트를 감지하는 유일한 (실용적인) 방법은 이중 닫기가 두 번 닫기로 닫히는 것을 보는 것입니다. ''((...))''. 정규식이 아닌 해결책은''\ \ (\ s * \ (/'')를 검색 한 다음 닫는 괄호가 레벨 0에서 발견 될 때까지 레벨을 계산하는 char에 의해 char을 읽습니다./\) \ s * \) /''이면, 우리는 이것이 중복 된 쌍의 괄호임을 알게 될 것이다. 코멘트에있는 괄호 또는 이모티콘; –

관련 문제