2012-02-03 38 views
8

thể trùng lặp:
regex for URL including query stringNhận url từ một văn bản

Tôi có một văn bản hoặc tin nhắn.

Hey! thử http://www.test.com/test.aspx?id=53

yêu cầu của chúng tôi này là để có được liên kết từ một text.We đang sử dụng đoạn mã sau

List<string> list = new List<string>(); 
Regex urlRx = new 
Regex(@"(?<url>(http:|https:[/][/]|www.)([a-z]|[A-Z]|[0-9]|[/.]|[~])*)", 
RegexOptions.IgnoreCase); 

MatchCollection matches = urlRx.Matches(message); 
foreach (Match match in matches) 
{ 
    list.Add(match.Value); 
} 
return list; 

Nó cung cấp cho url nhưng không phải là one.Output hoàn chỉnh của mã là

http://www.test.com/test.aspx

Nhưng chúng tôi cần url hoàn chỉnh như

http://www.test.com/test.aspx?id=53

Xin gợi ý cách giải quyết mà issue.Thanks trước.

+0

Hãy xem câu hỏi [stack Overflow] (http://stackoverflow.com/questions/2343177/regex-for-url-including-query-string), tôi tin rằng nó sẽ giải quyết vấn đề của bạn. – Bibhu

+0

Kiểm tra [trang này] (http://daringfireball.net/2010/07/improved_regex_for_matching_urls) để biết Regex hoàn chỉnh cho việc tìm kiếm và URL bị ẩn trong văn bản điều chỉnh. Nếu bạn cần một cái gì đó đơn giản hơn, tôi nghĩ rằng nó nhận xét đủ tốt rằng bạn sẽ có thể thích nghi nó với trường hợp cụ thể của bạn. –

Trả lời

14

Hãy thử regex này, trả về chuỗi truy vấn cũng

(http|ftp|https)://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)? 

Bạn có thể thử nghiệm nó trên gskinner

+2

Có vẻ hơi quá rõ ràng. Sẽ không '(ftp | https?): // [^ \ s] +' làm việc? –

+0

+1 @zapthedingbat Điều này cũng sẽ hoạt động –

7
public List<string> GetLinks(string message) 
{ 
    List<string> list = new List<string>(); 
    Regex urlRx = new Regex(@"((https?|ftp|file)\://|www.)[A-Za-z0-9\.\-]+(/[A-Za-z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*", RegexOptions.IgnoreCase); 

    MatchCollection matches = urlRx.Matches(message); 
    foreach (Match match in matches) 
    { 
     list.Add(match.Value); 
    } 
    return list; 
} 

var list = GetLinks("Hey yo check this: http://www.google.com/?q=stackoverflow and this: http://www.mysite.com/?id=10&author=me"); 

Nó sẽ tìm ra loại vật liệu làm liên kết:

http:// ... 
https:// ... 
file:// ... 
www. ... 
1

Nếu bạn đang sử dụng url này sau này trên mã của bạn (trích xuất một phần, chuỗi truy vấn hoặc v.v.) vui lòng consi der sử dụng

Uri lớp kết hợp với trợ giúp HttpUtility.

Nó có thể giúp bạn với các hoạt động này.

Các vấn đề liên quan