2016-06-29 12 views
-4

Url: https://en.m.wikipedia.org/wiki/Professional_TaxWie validieren Sie Wikipedia-URLs wie diese in PHP?

Wird nicht mit Regex validiert:

function isValidURL($url) { 
return preg_match('|^(http(s)?://)?[a-z0-9-]+\.(.[a-z0-9-]+)+(:[0-9]+)?(/.*)?$|i', $url); 
} 

der Zweck das so ist: Wir haben eine ganze Reihe von URLs in Pfosten (Forum) eingebettet - wir ein Skript erstellen möchten die im Wesentlichen verfolgen, welche URLs noch gut sind. Dazu müssen wir die URLs aus den Posts extrahieren und eine Datenbank erstellen, die in Intervallen auf ihre Statuscodes überprüft werden kann.

+3

Was bedeutet "validieren" bedeuten? Sie haben eine URL und möchten sehen, ob sie mit der Regex übereinstimmt? Und es stimmt nicht mit der Regex überein? Und Sie bitten uns, Ihre Regex zu debuggen? - Warum parst du die URL nicht mit einem URL-Parser (z. B. 'parse_url()') und verifizierst ihre Teile, z. dass die Host-Komponente wikipedia.org usw. ist. * Viel * einfacher als das Aufrechterhalten von Kauderwelsch-Regex. – deceze

+0

So sollte Ihre Regex aussehen: '(http (s)?: \/\ /)? [A-z0-9 \ -] + \. ([. A-z0-9 -] +) + (: [0-9] +)? (\ /.*)? ' –

+0

Ich extrahiere die URLs aus den Post-Strings und erstelle eine Datenbank mit diesen URLs. Überprüfen Sie den Status mit curl, um sicherzustellen, dass sie keine 404s sind. Die Regex dient nur dazu, die Gültigkeit der URLs zu überprüfen, die aus der Post-Zeichenfolge extrahiert werden. – Roycerus

Antwort

0

Um diese URL passend können Sie verwenden:

^https?\:\/\/([\w\.]+)wikipedia.org\/wiki\/([\w]+\_?)+ 

Diese nur Spiel URL, aber die URL bestätigen immer noch gut sind (wenn ich mich recht verstehen, heißt es aktiv) ... das ist nicht Aufgabe für eine Regex.

+0

Nein, die Regex dient nur dazu, die URLs zu extrahieren. Mit curl den Status überprüfen. Brauchen Sie etwas, das in der Lage wäre, alle Arten von URLs zu identifizieren und zu extrahieren. – Roycerus

0

hier eine Alternative regex ist für die meisten URLs:

(?<![@\w])(((http|https)(:\/\/))?([\w\-_]{2,})(([\.])([\w\-_]*)){1,})([\w.,@?^=%&amp;:\/~+#-]*[\[email protected]?^=%&amp;\/~+#-]) 

Sie mit Regex hier experimentieren: https://regex101.com/