2013-05-07 39 views
7

tôi đã cố gắng để kiểm tra phù hợp với facebook url và nhận hồ sơ trong một biểu thức chính quy: tôi có:biểu hiện thường xuyên để có được hồ sơ facebook

http://www.facebook.com/profile.php?id=123456789
https://facebook.com/someusername

tôi cần:

123456789 
someusername 

sử dụng cụm từ thông dụng này:

(?<=(https?://(www.)?facebook.com/(profile.php?id=)?))([^/#?]+) 

tôi nhận được:

profile.php 
someusername 

Whats sai?

+0

ok, có thể bạn có thể cung cấp thêm thông tin abo ut mục tiêu của bạn? có lẽ có nhiều phương pháp đơn giản hơn mà không có regex? – gaussblurinc

+0

http://rubular.com nói "Sửa dấu gạch chéo" và "Mẫu không hợp lệ trong giao diện". Sử dụng nó tương tác để có được một regex tốt. – olleolleolle

+0

Câu hỏi hay, nỗ lực cho thấy, đã thử thứ gì đó, ngày đầu tiên @ stackoverflow +1 – jAC

Trả lời

5

Tôi đồng ý với những người khác về việc sử dụng System.Uri nhưng regex của bạn cần hai sửa đổi để làm việc:

  • \ in (profile.php \ id =?)
  • (\ n | $) tại kết thúc

    (? < = (https?: // (www \.)? facebook \ .com/(tiểu sử \ .php \? id =)?)) ([^/#?] +) (\ n | $)

+0

Cảm ơn rất nhiều! Đây là giải pháp tuyệt vời của vấn đề! –

+0

Bạn nên thoát khỏi các dấu chấm của mình \. – WhileTrueSleep

+0

@WhileTrueSleep: cảm ơn, tôi đã cập nhật câu trả lời của mình. – nima

8

Tôi khuyên bạn nên sử dụng lớp System.Uri để nhận thông tin này. Nó làm công việc khó khăn cho bạn và có thể xử lý tất cả các loại trường hợp cạnh.

var profileUri = new Uri(@"http://www.facebook.com/profile.php?id=123456789"); 
var usernameUri = new Uri(@"https://facebook.com/someusername"); 

Console.Out.WriteLine(profileUri.Query); // prints "?id=123456789" 
Console.Out.WriteLine(usernameUri.AbsolutePath); // prints "/someusername" 
1

Hãy thử điều này:

https?://(?:www.)?facebook.com/(?:profile.php\?id=)?(.+) 

hoặc

https?://(?:www.)?facebook.com/(?:profile.php\?id=)?([^/#\?]+) 
1

Ví dụ sau đây viết các truy vấn ?id=123456789 ra cửa sổ Console.

Uri baseUri = new Uri ("http://www.facebook.com/"); 
Uri myUri = new Uri (baseUri, "/profile.php?id=123456789"); 

Console.WriteLine(myUri.Query); 

Hy vọng trợ giúp này!

+0

Url facebook là một ví dụ, tôi cần lấy hồ sơ từ các trang web khác và nếu url có thể là: http: Site.com/PROFILE/someElse có được hồ sơ bạn cần để viết một phương pháp khác, đây không phải là thực hành tốt –

+0

Đây chỉ là một ví dụ, thuộc tính Truy vấn chứa bất kỳ thông tin truy vấn nào được bao gồm trong URI! – Obama

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