2013-05-07 10 views
7

Ich habe versucht, Facebook-URL zu überprüfen, den und bekommen Profil in einem regulären Ausdruck: ich habe:Regulärer Ausdruck Facebook-Profil erhalten

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

ich brauche:

123456789 
someusername 

mit diesem regulären Ausdruck:

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

ich:

profile.php 
someusername 

Was ist falsch?

+0

ok, vielleicht können Sie weitere Informationen abo Dein Ziel? Vielleicht gibt es einfachere Methoden ohne Regex? – gaussblurinc

+0

http://rubular.com sagt "Fix Schrägstriche" und "Ungültiges Muster in Look-Behind". Verwenden Sie es interaktiv, um zu einem guten Regex zu kommen. – olleolleolle

+0

Gute Frage, zeigte Aufwand, versuchte etwas, erster Tag @ stackoverflow +1 – jAC

Antwort

5

ich mit anderen einverstanden System.Uri auf verwenden, aber Ihre regex braucht zwei Modifikationen zu arbeiten:

  • \ in (profile.php \ id =?)
  • (\ n | $) an das Ende

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

+0

Vielen Dank! Das ist eine großartige Lösung des Problems! –

+0

Sie sollten Ihre Punkte entkommen. – WhileTrueSleep

+0

@WhileTrueSleep: Danke, ich habe meine Antwort aktualisiert. – nima

8

Ich empfehle Ihnen, die System.Uri Klasse zu verwenden, um diese Informationen zu erhalten. Es macht die schwierige Arbeit für Sie und kann alle Arten von Randfällen behandeln.

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

Versuchen Sie folgendes:

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

oder

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

Das folgende Beispiel schreibt die Abfrage ?id=123456789 an die Konsole.

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

Console.WriteLine(myUri.Query); 

Hoffe, dass dies hilft!

+0

Eine Facebook-URL ist ein Beispiel, ich muss Profil von anderen Seiten zu bekommen und wenn die URL möglicherweise: http: Site.com/PROFILE/someElse zu Holen Sie sich das Profil, das Sie brauchen, um eine andere Methode zu schreiben, das ist keine gute Praxis –

+0

Dies ist nur ein Beispiel, die Query-Eigenschaft enthält alle Abfrage-Informationen in der URI enthalten! – Obama