2013-08-29 2 views
0

C# 스타일로 작성된 if 문과 일치 시키려면 다음 정규식 패턴을 사용하고 있습니다.C#의 if 문과 일치하는 정규 표현식 패턴?

\b[if]{2}\b[ ]?\({1}(?<HeaderSection>[ \w\s\a\t\=\.\@\#\$\%\&a-zA-Z0-9\(\)\;\/\"\'\[\]\*]*)\){1}(?<CommentSection>[\s\a\w\t a-zA-Z0-9\/\.]*)[\r\n]*\{{1}(?<FunctionBody>[\r\n \a\s\wa-zA-Z0-9\(\)\"\.\;\:]*)[\r\n]*\}{1} 

그 미친 긴 정규 표현식 패턴 만 보인다는 일부 작동하는 것은 나에게 그것을 설명 extent.Let,이 세 가지 이름을 캡처 그룹, 즉 HeaderSection, CommentSectionFunctionBody .HeaderSection 간의 일치를 포착했다 아래 문과 같이 if 문의 괄호를 시작하고 닫는 중.

if(Value1==Function(int Z)) 

캡처 됨;

Value1==Function(int Z) 

마찬가지로 CommentSection은 닫는 괄호 뒤에 주석이 있으므로 아래 문에서 캡처합니다.

if(Value1==Function(int Z))//This is a Comment. 

//This is a Comment. 

를 캡처 FunctionBody는 아래의 코드와 같이 {및} 사이에 아무것도 포착;

if(Value1==Function(int Z))//This is a Comment. 
{ 
    This is the 
    space for 
    function body. 
} 

"기능 본문을위한 공간입니다." 그래서 정규 표현식이 일치하는 이유에 대한 설명이었습니다. 이제이 문제는 내가 이와 같은 함수를 가지고있는 것입니다.

위의 정규식을 사용하여 일치하는 경우 첫 번째 선언과 일치하지 않습니다.

if(Value1==Function(int Z)//This is a Comment. 
{ 
Another function(); 
} 

대신 일치 내부 일 즉

if(Value2==Value1) 
    { 
    Some code 
    } 

내가 잘못한, 이하 지저분 다른 방법이 있으면 알려주세요, 또는 정규식 패턴의 경우 수정하시기 바랍니다 것을 지적하십시오 C#에서 정규 표현식 함수를 사용하여이 모든 작업을 수행하고 있습니다. 미리 감사드립니다.

+8

. 왜 이것을 정규 표현식에서하고 싶습니까? 조금도? –

+0

아니요, 정규식을 사용하고 싶지는 않지만 다른 방법으로는 찾을 수 없으므로이를 사용해야합니다. – PurpleXenon

+0

좋은 옛날 http://dinosaur.compilertools.net/ – I4V

답변

1
(?<header>if\(.*?)(?<comment>//.*?)*\s\n\{(?<functionbody>.*?)\n\} 

이것은 paran이 가정 된 방식으로 형성되는 경우 솔루션으로 보입니다.

(?<header>if\(.*?) 

아무것도에 의해 그러나 // 섹션 전에 다음 if( 일치합니다, 그래서

if(Value1==Function(int Z))

다음 그것은 또한 // 표지판을 따라 아무것도 일치하지만 것이다 것이라는 (?<comment>//.*?)*\s로 이동 일치합니다 *이 0 개 이상인 항목이없는 경우 일치하고 \s은 줄 끝 너머로 이동하지 않도록합니다.

다음 (\n\{)(?<functionbody>.*?)(\n\})은 개행 직후 {과 일치하고 개행 직후 }이 발견 될 때까지 진행됩니다.

var x = 0 
if(Value1==Function(int Z))//This is a Comment. 
{ 
    if(Value2==Value1) 
    { 
    Some code 
    } 
} 
var y = 0 

if(y == x) 
{ 
    x = y + 1 
} 

에 다음과 같은 그룹과 일치하는 것입니다 : 내가 무슨 잘못 여기에서 지적 할 수있는 충분한 손가락이없는

header: if(Value1==Function(int Z)) 
comment: //This is a Comment. 
functionbody: 
    if(Value2==Value1) 
    { 
    Some code 
    } 

header: if(y == x) 
functionbody: 
     x = y + 1