2016-05-06 24 views
2

Ich hoffe, jemand kann helfen, das macht mich verrückt!Regex entfernen www von URL

Ich versuche Logstash Grok Filter zu ändern, um einen Domain-Namen zu analysieren. Derzeit die Regex ist: \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b) und richtig trennt die Domäne, aber ich muss eine zusätzliche Überprüfung hinzufügen, um www. zu entfernen.

Dies ist, was ich mit so weit gekommen sind:

\b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(^(?<!www$).*$?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b) 

Ich kann nur den www. Teil der Domäne zu halten scheinen, und nicht die Domäne selbst. Beispiel für was ich erreichen muss: www.stackoverflow.com sollte stackoverflow.com sein.

Ich muss speziell www. und nicht die gesamte Subdomäne entfernen.

Vielen Dank im Voraus!

UPDATE

Beispiel Eingänge zu erwarteten Ergebnisse (mit diesen Beitrag als Beispiel): In seiner aktuellen Zustand: https://stackoverflow.com/questions/37070358/ kehrt www.stackoverflow.com

Was ich brauche, ist für sie stackoverflow.com

+0

Warum erfassen Sie nicht den Domain-Namen ohne den www-Teil? – CinCout

+0

Wenn ich Ihre Frage richtig interpretiere, muss ich Subdomains einbeziehen, zum Beispiel: blog.stackoverflow.com, aber speziell www. Deshalb habe ich einen Rückblick versucht. Nicht sicher, wie man den Domain-Namen gerade fängt? – josh

+0

also wollen Sie auch die Subdomain, nur wenn es www ist Sie wollen es fallen lassen? Können Sie uns mögliche Eingaben zeigen? – CinCout

Antwort

2

zurückzukehren Sie können eine (?!www\.) und (?!http:\/\/www\.) negative Lookaheads direkt nach der ersten \b hinzufügen, um passende www. oderauszuschließen 10:

\b(?!www\.)(?!http:\/\/www\.)(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(?:\.?|\b) 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

Siehe regex demo

Sie können mehr negativen Lookaheads hinzufügen https:// oder ftp/ftps Links auszuschließen.

ALTERNATIVE:

\b(?!(?:https?|ftps?):\/\/)(?!www\.)(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(?:\.?|\b) 

Siehe this regex demo

Die (?!(?:https?|ftps?):\/\/) und (?!www\.) Lookaheads werden Sie nur das Protokoll und www Teile der URLs lassen überspringen.

+0

Das funktioniert ohne 'http/https: //' vor der Domain ... Leider enthalten die meisten Domains es. – josh

+0

Das ist kein Problem: '\ b (?! Www \.) (?! http: \/\/www \.) (?: [0-9A-Za-z) [0-9A-Za-z -] {0,62}) (?: \. (?: [0-9A-Za-z] [0-9A-Za-z -] {0,62})) * (?: \.? | \ b) ' –

+0

Vielen Dank !! Funktioniert perfekt! – josh

0

Dies entspricht dem Teil nach www, wenn die URL mit www beginnt.

(?!www\.)\b(?:(?!-)[0-9A-Za-z]{1,63})(?:\.(?:(?!-)[0-9A-Za-z-]{1,63}))*(\.?|\b) 

ich vereinfachte den Rest Ihres regex auch durch einen negativen Blick nach vorn für - in dem Sub-Domains verwenden.