2017-03-22 3 views
1

Was ich tun möchte, ist einfach. Ich möchte bestimmte URLs filtern, die bestimmte Keywords enthalten.Regex zum Filtern bestimmter URL mit mehreren Keywords

Was ich im Moment tun, ist so etwas wie dieses:

http://.*Examplesite.com/.*(?!Keyword).* 

die für mich ganz gut funktioniert. Aber wenn ich für verschiedene Keywords filtern möchten und ignorieren, in welcher Reihenfolge sie würde ich dies versuchen:

http://.*Examplesite.com/.*(?!Keyword1|?!Keyword2|...).* 

Das ist nicht für mich arbeiten. Auch versucht nur "?!" mit Schlüsselwort1. Was ist der richtige Weg, um das zu lösen? Ich brauche nur das einfache Regex-Beispiel wie das oben beschriebene.

Vielen Dank im Voraus!

+0

Sie sollten URL-Klasse, nicht Regex verwenden – Jens

+0

https://docs.oracle.com/javase/7/docs/api/java/net/URL.html – Mistalis

+0

Ja, wahrscheinlich möchten Sie keine Regex verwenden URLs analysieren Nehmen wir an, Sie möchten es. '(?!' ist eine negative Vorausschau ... es geht nur am Anfang des Blocks, nicht nach jedem '|'. Kannst du mir ein Beispiel für eine URL geben und was erwartest du daraus? – Dacav

Antwort

0

Ich benutze dieses Werkzeug, wenn ich etwas mit Regex here tun muss.

Es ist unklar, was Sie meinen, indem Sie die Anfragen filtern. Möchten Sie die Anfragen löschen, indem Sie einfach das Muster anpassen oder möchten Sie die Werte der Übereinstimmungen selbst erfassen? Dies wird die Komplexität der Regex stark verändern.

Ich warne, dass Ihre letzte Zeile scheint, dass Sie einen komplexeren Ausdruck wollen. Obwohl es noch immer regulär ist, fängt es an, komplexere Funktionen einzubeziehen, wie zum Beispiel den Kontext zu überprüfen und den "einfachen" Pfad zu verlassen.

Da ich noch nicht kommentieren kann, werde ich diese Antwort aktualisieren, um eine Lösung zu enthalten, wenn sie beantwortet wird.

EDIT: Ich glaube nicht, Regex ist die Lösung, die Sie suchen, vor allem, wenn diese Liste kann groß .. aber ich denke, das könnte ein guter Anfang zu dem, was Sie suchen.

(?i)((?!dogs)(?!cats)[\.|/|\:|\w])+ 

Dies sollte nur Zeichenfolgen übereinstimmen, die insensitiv keine Hunde oder Katzen enthalten. Ich schlage vor, dass Sie den Pfad von einer URL verwenden, da dies auch diese von beliebigen Fehlalarmen des Abfrageparameters sowie von Domänenfehlern isoliert.

Um weitere Begriffe hinzuzufügen oder dynamisch zu erstellen, fügen Sie einfach weitere (?! Wort) Blöcke hinzu. Der Rest des Ausdrucks entspricht einem normalen URI-Zeichensatz. Wenn Sie jedoch noch weitere Elemente benötigen, fügen Sie einfach einen weiteren Balken '|' hinzu. und schließe den Charakter ein, den du unterstützen musst.

Wenn Sie viel klüger damit werden wollen, würde ich vorschlagen, dass Sie wahrscheinlich eine andere Lösung betrachten, da dies die Grenze der Nützlichkeit für reguläre Ausdrücke nähert.

+0

Zum Beispiel habe ich 3 URLs wie folgt: – FrankS

+0

Zum Beispiel habe ich 3 URLs wie folgt: www.exampleone.com/videos/funny/cats www.exampletwo.com/videos/sad/funeral www.examplethree.com/videos/funstuff/dogs Ich möchte alle URLs löschen, die entweder "Hunde" oder "Katzen" enthalten. Mit einer Regex, die dem obigen Beispiel folgt, möchte ich diese zwei URLs löschen, die die Schlüsselwörter enthalten. – FrankS

+0

Hat der Domain-Teil der URL-Zeichenfolge eine Bedeutung für Sie? Wenn nicht, könnten Sie einfach mit dem Servlet-Pfad arbeiten, was die Komplexität um ein Vielfaches reduzieren würde. Fügen Sie immer noch die Anforderung ein, den Kontext signifikant zu halten? Z.B. Hunde ausschließen, es sei denn, es ist Katzen vorausgegangen. Bedeutung http://www.examplefour.com/videos/funny/cats/fight/dogs würde nicht fallen gelassen werden. –

Verwandte Themen