2011-02-24 3 views
1

가능한 중복 URL을 얻을 : 정규 표현식을 사용하여 문자열에서 URL을 추출하려고
Get a URL from a String문자열에서

안녕, 메신저. 문자열은 다음과 같습니다. "lorem ipsum baby www.test.com lorem", "lorem ipsum http://www.test.com foo bar"또는 "lorem www.test.com", 뒤 공백 없음.
사용
MatchCollection ms = Regex.Matches(adress, @"(www.+|http.+)([\s]|$)");
은 전체 문자열을 반환합니다. regexp-guru가 나를 도와 줄 수 있습니까?

편집 :
해결이 이런 식으로 :
MatchCollection mc = Regex.Matches(adress, @"(www[^ \s]+|http[^ \s]+)([\s]|$)", RegexOptions.IgnoreCase);
adress = mc[0].Value;
WebBrowserTask task = new WebBrowserTask();
task.URL = adress;
task.Show();

는 당신의 도움에 대해 감사합니다! :)

+0

** VERY ** 프리미티브 : ((? : https? : \/\/| www | [^ \ s] + \. [az] {2,3}) [^ \ s] *?) [\. \?; :]?'작동해야합니다. 하지만 URL을 둘러싸거나 그 안에있을 수있는 모든 메타 문자를 제거하려면 매우 긴 정규식이 필요합니다. –

+0

이 부분의 머리가 켜져 있습니까? –

+3

정규 표현식이 URL과 일치하도록하려는 사람들의 수와 함께 Microsoft는 공용 표현식의 표준 라이브러리를 만들어 어딘가에 .NET 프레임 워크에 저장해야합니다. 나는'Url.Matches (address)'또는'Guid.Matches (@string)'또는'DateTime.Matches (@string)'을 그냥 사용하는 것이 좋습니다. – kelloti

답변

4

나는 우리가 여기에이 코드 아무 문제가 실제로이 없다는 명백한 누락 생각합니다.

아마도 OP가 match.value를 올바르게 호출하지 않습니다.

string adress = "hello www.google.ca"; 
// Size the control to fill the form with a margin 
MatchCollection ms = Regex.Matches(adress, @"(www.+|http.+)([\s]|$)"); 
string testMatch = ms[0].Value.ToString(); 

testMatch은

이 당신의 의도 newa 아닌가 "www.google.ca"를 포함?

+0

예, 이것이 문제였습니다. : | 감사합니다 :) – nevva

+0

언제든지 문제가되지 않습니다! – clamchoda

0

나는 문제는 "." 식별자는 캡처를 끝내고 자하는 뒤에 오는 공백을 포함하여 모든 것과 일치합니다. ". +"를 "[^] +"로 변경하거나 여는 괄호 안에 "? :"를 넣어 첫 번째 캡처를 "비합법적"으로 만들면 원하는 답을 얻어야합니다. 이 같은

3

시도 뭔가 :

string txt = "lorem ipsum baby http:\\\\www.google.com\/"; 
Regex regx = new Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", 
RegexOptions.IgnoreCase); 
MatchCollection ms = regx.Matches(txt); 
+0

작성자는 http로 시작하는 접두사뿐만 아니라 "www"접두어와 일치시키기를 원했습니다. ; p 어느 쪽이든, 나는 [RegExLib] (http://regexlib.com/)이 어떤 곳에서도 시작하기에 좋은 장소라고 생각합니다. –