2010-04-29 2 views
3
var flashvars = { 
     "client.allow.cross.domain" : "0", 
     "client.notify.cross.domain" : "1", 
}; 

(C#의 경우)이 코드로 구문 분석되기를 원합니다..NET Regex 패턴?

private void parseVariables() { 
     String page; 
     Regex flashVars = new Regex("var flashvars = {(.*?)}", RegexOptions.Multiline | RegexOptions.IgnoreCase); 
     Regex var = new Regex(@"""(.*?)"",", RegexOptions.Multiline | RegexOptions.IgnoreCase); 
     Match flashVarsMatch; 
     MatchCollection matches; 
     String vars = ""; 

     if (!IsLoggedIn) 
     { 
      throw new NotLoggedInException(); 
     } 

     page = Request(URL_CLIENT); 

     flashVarsMatch = flashVars.Match(page); 

     matches = var.Matches(flashVarsMatch.Groups[1].Value); 

     if (matches.Count > 0) 
     { 
     foreach (Match item in matches) 
     { 
      vars += item.Groups[1].Value.Replace("\" : \"", "=") + "&"; 
     } 
    } 
} 
+0

@Scott : 그냥 학자 연합니다 : C#을 (자바 스크립트와는 달리) 전혀 정규식 지원이없는 프로그래밍 언어입니다. OTOH에서 .NET Framework에는 System.Text.RegularExpressions.Regex 클래스가 있습니다. –

답변

5

사용 RegexOptions.SingleLine 오히려

는 단일 라인 모드를 지정 RegexOptions.Singleline

RegexOptions.Multiline보다. 도트 (.)의 의미를 변경하여 (\ n을 제외한 모든 문자 대신) 모든 문자와 일치시킵니다.

http://msdn.microsoft.com/en-us/library/443e8hc7(vs.71).aspx

+0

문제가 해결되었습니다. 감사 vfilby와 맥스 Shawabkeh. – Scott

2

Singleline 플래그를 사용해야합니다. 그렇지 않으면 마침표가 새 줄과 일치하지 않습니다. MultiLine은 행 시작/끝에서 ^$을 일치시키는 데 사용됩니다. 또한, 중괄호를 탈출해야합니다

Regex flashVars = new Regex(@"var flashvars = \{(.*?)\}", RegexOptions.Singleline | RegexOptions.IgnoreCase); 
+0

DotAll 플래그를 찾을 수 없습니다. C# .NET의 RegexOption이 맞는지 확인하십시오. – Scott

+0

DotAll은 한 줄로 알려져 있습니다.이 답변을 참조하십시오 : http://stackoverflow.com/questions/2740176/net-regex-pattern/2740273#2740273. – vfilby

+0

수정 됨. 파이썬의 이름 지정에 사용됩니다. .NET에 상응하는 것은 'Singleline'입니다. –