2011-09-08 3 views
4

이 질문은 방법으로,이다의 하위 그룹 내 이전에 대답 질문의 연속 :추출 그룹 및 정규식

Regex find = new Regex(@"(?<First>[,""]url=)(?<Url>[^\\]+)(?<Last>\\u00)"); 

: Getting "Unterminated [] set." Error in C#

나는 URL을 추출하는 C#에서 정규 표현식을 사용하고 있습니다 텍스트 형식의 URL을 포함하는 경우 :

, URL = http://domain.com?itag=25 \ u0026, URL을 = http://hello.com?itag=11 \ u0026

'URL'그룹에 전체 URL이 표시되지만 itag 값을 별도의 'iTag'그룹에 갖고 싶습니다. 하위 그룹을 사용하여이 작업을 수행 할 수 있다는 것을 알고 있으며이 작업을 수행하는 방법을 정확하게 파악할 수는 없습니다.

+0

확인이 사이트 아웃 : http://txt2re.com/index.php3 그것은 아마도 때문에 [^ \\] 전체 URL 넘어있는, 아무것도 캡처 아니에요 –

답변

4

Regex에 이미 명명 된 그룹이 있습니다. ?<First> 구문은 그 괄호 내의 모든 것의 이름을 지정합니다 First.

Regex을 사용하여 일치하는 경우 Groups 속성을 사용하여 GroupCollection에 액세스하고 이름별로 그룹 값을 추출하십시오.

var first = regex.Match(line).Groups["First"].Value; 

이렇게하면 iTag에 대한 추가 그룹이 추가되지만 전체 URL은 유지됩니다. 다른 괄호 바깥으로 이동하여 변경하십시오.

(?<First>[,""]url=)(?<Url>[^\?]+?itag=(?<iTag>[0-9]*))(?<Last>\\u0026) 

다음은 코드입니다.

Regex regex = new Regex("(?<First>[,\"]url=)(?<Url>[^\\?]*\\?itag=(?<iTag>[0-9]*))(?<Last>\\u0026)"); 
string input = ",url=http://domain.com?itag=25\u0026,url=http://hello.com?itag=11\u0026"; 

foreach(Match match in regex.Matches(input)) 
{ 
    System.Console.WriteLine("1. "+match); 
    System.Console.WriteLine(" 1. "+match.Groups["First"]); 
    System.Console.WriteLine(" 2. "+match.Groups["Url"]); 
    System.Console.WriteLine(" 3. "+match.Groups["iTag"]); 
    System.Console.WriteLine(" 4. "+match.Groups["Last"]); 
} 

결과 :

1. ,url=http://domain.com?itag=25& 
    1. ,url= 
    2. http://domain.com?itag=25 
    3. 25 
    4. & 
1. ,url=http://hello.com?itag=11& 
    1. ,url= 
    2. http://hello.com?itag=11 
    3. 11 
    4. & 
+0

itag 부분이 처리되기 전에. [? [, "] url =) (? ) [^ &] + itag = (? [0-9] *) [? \\ u0026] '텍스트로 된 모든 링크를 하나의 URL로 캡쳐하는 것? – tunafish24

+0

당신은 맞습니다, 어떤 이유로 코드가 아니라 [여기] (http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx)에서 일하고있었습니다. . 수정 된 대답. – TheCodeKing