Regulärer Ausdruck für die Übereinstimmung mit relativen und absoluten URLs

8

Jeder möchte versuchen, einen Regex zu finden, der beiden entspricht:

Ich denke, es könnte unmöglich sein, es mit einer Regex zu tun, aber Sie wissen es nie.

EDIT: Um zu verdeutlichen, was ich versuche, ist es, alle URIs aus einem Dokument auszuwählen (kein HTML-Dokument).

    
FlySwat 15.06.2009, 22:20
quelle

6 Antworten

8
%Vor%

Begründung für diese Antwort:

  1. Das Ganze ist gruppiert, sodass Sie die gesamte URL
  2. auswählen können
  3. Der Protokollteil ist optional, sollte aber ein Hostname oder eine IP-Adresse angegeben werden (beide haben weniger Zeichen als der Rest des URI).
  4. Das "/" am Anfang ist auch optional. Pfade können die Form "images / 1.gif" haben, die relativ zum aktuellen Pfad und nicht relativ zum Hostnamen sind.

Vorbehalte:

  1. mailto und Datei-URIs werden nicht unterstützt.
  2. URLs, die nach einem bestimmten Zeitraum angezeigt werden (z. B. am Ende eines Satzes ohne Zitat), enthalten den nachgestellten Zeitraum.
  3. Wegen # 3 oben wird es alle möglichen Dinge erfassen. Wenn Sie sicherstellen können, dass alle Pfade nicht relativ sind, können Sie ein "/" außerhalb der Klammer hinzufügen und es somit benötigen.
  4. Wenn alle URIs in HTML-Attributen (A, LINK, IMG usw.) enthalten sind, können Sie die URIs genauer ansprechen, indem Sie sie nur in Anführungszeichen oder zumindest nur in HTML-Tags erfassen.

Bearbeiten: whoops, behobenes Schließen des Problems.

    
richardtallent 15.06.2009 22:53
quelle
2

Das ist schwierig, weil es so viele gültige Zeichen in URLs gibt (bevor sie URL-codiert werden).

Hier ist mein Foto:

%Vor%

Auch ähnlich wie bei Alex. Das einzige Problem, das ich bei Alex gefunden habe, ist, dass es nicht mit Dingen wie Pfundzeichen, Bindestrichen und ähnlichem übereinstimmt. Während mir das alles passt.

BEARBEITEN - Tatsächlich ist das einzige, was es davon abhält, zu gierig zu sein, die Anweisung, KEINE Leerzeichen, Anführungszeichen, Apostrophe oder Chevrons zu finden.

    
Steve Wortham 15.06.2009 22:42
quelle
2
%Vor%

Ähnlich wie bei Alex.

    
John G 15.06.2009 22:37
quelle
1
%Vor%

entspricht diesen, aber vielleicht hatten Sie strengere Bedingungen im Auge?

    
Alex Martelli 15.06.2009 22:33
quelle
0

Nicht einfach und Sie haben vielleicht am Ende "zu viel URI" gefangen, aber was ist mit:

%Vor%

Im Grunde haben Sie ein paar Gruppen dort. Beim Definieren des Protokolls. Man sucht nach dem Verzeichnis und sucht am Ende nach einer Datei. Aber! Dieser Ansatz ist sehr begrenzt. Wenn Sie eine echte URI-Validierung benötigen und! Trennung (Port, Benutzername, Passwort, unerwünschte Zeichen ausfiltern!) Sie werden wahrscheinlich mit einem viel komplexeren Ausdruck enden. Viel Glück!

Aktualisierung:

Sie haben nicht danach gefragt, aber für jene Leute, die von Suchmaschinen kommen, die mehr über Regex lernen wollen, möchte ich dieses kostenlose Programm, das ich für diesen Versuch benutzt habe, einstecken: Der Regex-Coach " (Nein, nicht angegliedert).

    
merkuro 15.06.2009 22:53
quelle
0

Ich habe Capture-Gruppen benannt. Wir bekommen bessere Übereinstimmungen, wenn das Schema vorhanden ist. Wie www.foo.com/bar würde nur passen / bar.

%Vor%

Dies können Sie für Javascript tun

%Vor%

Testdaten

%Vor%     
TJR 16.06.2009 03:30
quelle

Tags und Links