Angesichts der folgenden Facebook-Profil- und Seiten-URLs ist es meine Absicht, Profil-IDs oder Benutzernamen in die erste Übereinstimmungsposition zu extrahieren.
http://www.facebook.com/profile.php?id=123456789
http://www.facebook.com/someusername
www.facebook.com/pages/Regular-Expressions/207279373093
Der Regex, den ich bisher habe, sieht so aus
(?:http:\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(\d.*))?([\w\-]*)?
Was zu folgenden Ergebnissen führt:
Ergebnis 1
1. 123456789
Ergebnis 2
1.
2. ein Benutzername
Ergebnis 3
1.
2. 207279373093
Das ideale Ergebnis würde so aussehen:
Ergebnis 1
1. 123456789
Ergebnis 2
1. ein Benutzername
Ergebnis 3
1. 207279373093
Das heißt, ich möchte, dass die Profil-ID immer an erster Stelle steht.
Es wäre auch ideal, wenn www.facebook.com/ und facebook.com/ nicht zusammenpassen würden.
Ich würde empfehlen Rad Software Regular Expression Designer .
Auch dieses Online-Tool ist großartig https://regex101.com/ (obwohl die meisten Leute es vorziehen http://regexr.com/ )
(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-]*)?
Ich habe vor einiger Zeit einen Gist gemacht, der gegen die angegebenen Beispiele funktioniert:
# Matches patterns such as:
# http://www.facebook.com/my_page_id => my_page_id
# http://www.facebook.com/#!/my_page_id => my_page_id
# http://www.facebook.com/pages/Paris-France/Vanity-Url/123456?v=app_555 => 45678
# http://www.facebook.com/pages/Vanity-Url/45678 => 45678
# http://www.facebook.com/#!/page_with_1_number => page_with_1_number
# http://www.facebook.com/bounce_page#!/pages/Vanity-Url/45678 => 45678
# http://www.facebook.com/bounce_page#!/my_page_id?v=app_166292090072334 => my_page_id
/(?:http:\/\/)?(?:www\.)?facebook\.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-]*)/
So erhalten Sie die neueste Version: https://Gist.github.com/733592
Das vollständigste Muster für die Facebook-Profil-URL:
/(?:https?:\/\/)?(?:www\.)?facebook\.com\/.(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-\.]*)/
Es erkennt alle Fälle + einen wichtigen Unterschied. Andere Regex-Muster erkennen http://www.facebook.com/ als gültige Facebook-Profil-URL, obwohl es sich nicht um eine gültige Profil-URL handelt. Es ist nur die ursprüngliche Facebook-URL und keine Benutzer- oder Seitenadresse. Dieser reguläre Ausdruck kann jedoch eine normale URL von einer Profil- und Seiten-URL unterscheiden und akzeptiert nur die gültige.
Nur dieser reguläre Ausdruck funktioniert korrekt für alle FB-URLs:
/(?:https?:\/\/)?(?:www\.)?(?:facebook|fb|m\.facebook)\.(?:com|me)\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-\.]+)(?:\/)?/i
Regex, mit dem Profilseiten korrekt mit einem gekennzeichnet werden. im Namen wie www.facebook.com/my.name und es wird auch www.facebook.com/ oder home.php ausgeschlossen, da es sich nicht um eine gültige Facebook-Seite handelt.
https://regex101.com/r/koN8C2/2
(?:(?:http|https):\/\/)?(?:www.|m.)?facebook.com\/(?!home.php)(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\.-]+)
Lassen Sie mich wissen, wenn Sie etwas gefunden haben, das nicht übereinstimmt.
Spiele facebook.com , m.facebook.com , mbasic.facebook.com und fb.me (kurzer Link)
/(?:https?:\/\/)?(?:www\.)?(mbasic.facebook|m\.facebook|facebook|fb)\.(com|me)\/(?:(?:\w\.)*#!\/)?(?:pages\/)?(?:[\w\-\.]*\/)*([\w\-\.]*)/ig
Ich habe jede einzelne Antwort oben ausprobiert und jede funktioniert aus mindestens einem Grund nicht. Dies ist für OP höchstwahrscheinlich nicht hilfreich, aber wenn jemand wie ich dies bei einer Websuche findet, glaube ich, dass dies die richtige Antwort ist:
^(?:.*)\/(?:pages\/[[:alnum:]-]+\/)?(?:profile\.php\?id=)?([[:alnum:].]+)
Unterstützt im Grunde alles, was mir einfällt, außer zu überprüfen, ob die Domain facebook.com enthält. Wenn Sie überprüfen müssen, ob die URL gültig ist, sollte dies außerhalb eines regulären Ausdrucks erfolgen, um sicherzustellen, dass die Seite oder das Profil tatsächlich vorhanden ist. Warum zweimal überprüfen, besonders wenn eine der Prüfungen unvollständig ist?