2014-10-21 2 views
0

URL의 일부를 추출하기 위해 C#에서 regex를 사용하지만 URL에 "www"가 없다면 그룹화 횟수가 변경되어 항상 match.Groups[3].Value으로 갈 수있는 것은 아닙니다. 내 가치. 내 정규식은Regex 그룹이 존재하지 않을 수도 있습니다

Regex r1 = new Regex(@"(http[s]?://)([A-Za-z0-9\-]+)(\.([A-Za-z0-9\-]+))*"); 

숫자가 깨지지 않도록 항상 존재하도록 할 수 있습니까?

+2

가능하면 가능하면 ['Uri' class] (http://msdn.microsoft.com/en-us/library/system.uri (v = vs.110) .aspx)를 사용해야합니다. –

+0

URI 클래스 또는 심지어 문자열 클래스 .. 아마도 당신은'Split()'메소드를 구현할 수 있습니다 – MethodMan

+0

split이 점에서 "www." 도트 그 자체가 존재하지 않습니다. – CerIs

답변

1

옵션 수동 (비 캡처) 그룹 사용 (예 : '(:?. WWW)?'아래). 'WWW'

Regex r1 = new Regex(@"(http[s]?://)(?:www\.)?([A-Za-z0-9\-]+)(\.([A-Za-z0-9\-]+))*");

존재 (또는하지 않음)을 그런 다음 그룹화 수를 고려하지 않습니다.

+0

고마워요. :). 나는 일종의 일종의 그룹핑을 시도했지만 매번 처음 존재했는지 확인해야한다는 것을 의미했습니다. – CerIs

0

죄송합니다. 답변하기 전에 질문을 자세히 읽어 보시기 바랍니다. :)

그룹의 이름을 지정하면 이름으로 색인을 생성하고 각 그룹의 "성공"속성을 확인하여 실제로 일치 된 요소를 확인할 수 있습니다.

물론 일부 정규 표현식의 경우 모든 캡처 그룹이 일치하지 않으면 모든 것이 일치하지 않습니다. 그것은 정규 표현식에 따라 다릅니다.

관련 문제