7

我试图检查匹配的 facebook url 并在一个正则表达式中获取个人资料:我有:

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

我需要:

123456789
someusername

使用这个正则表达式:

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

我得到:

profile.php
someusername

怎么了?

4

4 回答 4

8

我建议您使用该System.Uri课程来获取此信息。它为您完成了艰巨的工作,并且可以处理各种边缘情况。

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"
于 2013-05-07T08:18:21.887 回答
5

我同意其他人使用 System.Uri 但您的正则表达式需要两个修改才能工作:

  • \ in (profile.php\?id=)
  • (\n|$) 最后

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

于 2013-05-07T08:44:12.693 回答
1

试试这个:

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

或者

https?://(?:www.)?facebook.com/(?:profile.php\?id=)?([^/#\?]+)
于 2013-05-07T08:29:30.587 回答
1

以下示例将查询写入?id=123456789控制台。

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

Console.WriteLine(myUri.Query);

希望这可以帮助!

于 2013-05-07T08:30:14.280 回答