2012-06-04 3 views
0

샘플 소스 코드를 공부했지만이 부분을 이해할 수 없습니까?이 코드는 무엇을하고 있습니까? 대부분 정규식 부분 ... 사용되는 매개 변수에RegEx로 수행하는 코드의 내용

는 "코드"문자열, 그것은 우리가 전달하는 C# 소스 코드입니다.

Match m = null; 
    if ((m = Regex.Match(code, "(?ims)^[/']{2}REFDLL (?<ref>.+?)$")).Success) 
    { 
    foreach (string refDll in m.Groups["ref"].Value.Split(new char[] { ';', ',' })) 
    { 
     //2008-06-18 by Jeffrey, remove redundant \r 
     string mdfyRefDll = refDll.Replace("\r", "").Replace("\n", ""); 
     //trim the ending .dll if exists 
     if (mdfyRefDll.ToLower().EndsWith(".dll")) 
      mdfyRefDll = mdfyRefDll.Substring(0, mdfyRefDll.Length - 4); 
     string lcRefDll = mdfyRefDll.ToLower(); 
     if (lcRefDll == "system.data.linq" || lcRefDll == "system" 
      || lcRefDll == "system.xml.linq" || lcRefDll == "system.core") 
     continue; 
     cp.ReferencedAssemblies.Add(mdfyRefDll + ".dll"); 
    } 
    } 
+0

'code' 변수의 값 범위는 무엇입니까? 샘플 입출력이 있습니까? – Kiril

+0

@Lirik : "C# 소스 코드"는 "코드"로 전달할 수있는 샘플입니다. 일반적인 C# 코드입니다. – Bohn

+1

그것은'using' 문장을 모두 찾아 내고 참조 된 라이브러리에 필요한 적절한 어셈블리를 컴파일러 매개 변수에 추가합니다. 당신이 이해하려고하는 것이 더 있습니까? – Kiril

답변

2

나는이 이미지는 사용자가 게시 된 코드에서 무슨 일이 일어나고 있는지 주소 생각 :

RefDLL

다음과 같이

미니 C# 랩의 프로젝트 설명은 다음과 같습니다

간단한 짧은 C# 코드를위한 편리한 도구 실행 및 테스트를 통해 Visual Studio 시작을 기다리는 시간을 절약하고 많은 일회성 프로젝트 파일을 만들지 않아도됩니다.

해당 프로젝트가 문서를없는 것 같다, 그래서 이미에 using directive있을 때 코드의 저자가 참조 된 DLL을 추가하는 특정 방법을 선택한 이유를 추정하기는 어렵습니다. 아마도 그는 using statement과의 충돌을 피하려고했을 것입니다.

1

첫째, (?ims)이 지정됩니다 옵션을 제공합니다. i은 대소 문자를 구분하지 않으며 m은 줄 바꿈 모드를 지정하고 s (IIRC)은 도트 올 옵션을 사용합니다. 즉, 와일드 카드 .에는 줄 바꿈 문자가 포함됩니다.

그런 다음, ^는 주장, "문자열은 없이 앞의 문자, 여기를 시작해야합니다 ..."마지막에 $가 주장하면서, "문자열해야 여기에, 아니 다음 문자로."

[/']{2} 일치 슬래시 또는 작은 따옴표 하나의 문자 정확히 두, 즉 //, '', /''/.

REFDLL은 보는 것과 정확히 일치합니다.

(?<ref>.+?)은 나머지 문자 (최종 물음표는 필요 없음)와 일치하며 s 옵션으로 인해 줄 바꿈 문자가 포함됩니다. 이 부분은 ref이라는 일치 항목에 저장됩니다. 요약

,

//REFDLL helloworld foobar 

저장 "helloworld를의는 foobar"ref에서 같은과 일치하려고.