Domain Regex

  • Hallo,

    wer kennt sich von Euch mit Regex aus? Ich suche 2 getrennte Abfragen, um die Domain aus folgenden Zeichenketten zu erhalten.

    Quelle ublock

    StringRegExp() Abfrage (1) für folgende Zeilen

    ||p5.focus.de/img/fotos/*/banner*.jpg$image

    ||apis.google.com/js/plusone.js$script

    ||mobilbranche.de/wp-content/themes/mobilbranche_2014/lib/img/mobilbranche_bg1.gif$image

    ||connect.facebook.net^$script

    ||a.bf-tools.net^$script

    Ergebnis

    focus.de

    google.com

    mobilbranche.de

    facebook.net

    bf-tools.net

    StringRegExp() Abfrage (2) für folgende Zeilen

    www1.wdr.de##.socialMedia

    praxistipps.focus.de##.fb-wrap.fb-direction-row.fb-col-12

    192.168.178.100##.col-sm-6.col-xs-12

    Ergebnis

    wdr.de

    focus.de

    192.168.178.100

    PS: Gibt es eine bessere / leichtere Möglichkeit als StringRegExp()?

    (3)

    Was ist der beste Ansatz, um die ublock.txt inhaltlich nach der Domain zu sortieren?

    Einmal editiert, zuletzt von Banana_2_Day (4. August 2021 um 18:47)

  • Warum zwei getrennte Abfragen?

    Mal schnell und etwas naiv rangegangen - aber so sollte das Prinzip klar bleiben und kann auch leicht angepasst werden.:

    regex101: build, test, and debug regex
    Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java. Features a regex quiz & library.
    regex101.com

    Was meine ich mit "naiv"?:

    • ist aktuell auf feste Top-Level-Domains beschränkt (die du gerne erweitern kannst oder durch etwas variables ersetzen)
    • Umlaute und diakritische Zeichen sind prinzipiell auch (in Abhängigkeit von der Top-Level-Domain) erlaubt (Die IDN-Tabellen) - hier aber nicht.
  • Reicht das verlinkte Pattern für deinen Zweck?

    Ich bin gerade am Testen, die Datei enthält rund 1000 Zeilen. Melde mich heute, ob es funktioniert :)

    Vielen Dank.


    Kannst Du das Pattern so umschreiben, dass es unabhängig von einer Topleveldomain ist?

    Laut Wiki gibt es ca. 1500 Topleveldomains.

    Es sind sehr viele unterschiedliche Topleveldomains.

    Lokale IP Adressen habe ich bei meiner Anfrage in Post 1 vergessen.

    ublock Beispiel (in Post 1 ergänzt)

    192.168.178.100##.col-sm-6.col-xs-12


    ([[:alnum:]-]+\.(?>de|com|net|org))\b

    Wäre folgendes ein Ansatz ohne Topleveldomain, die 2 bis 4 Zeichen enthalten?

    zu (1)

    \. gefolgt von 2 bis 4 Zeichen, gefolgt von /

    zu (2)

    \. gefolgt von 2 bis 4 Zeichen, gefolgt von ##

    6 Mal editiert, zuletzt von Banana_2_Day (4. August 2021 um 21:36)

  • Lese mich in Regex ein, so einfach wie unten geht es nicht :-), finde ich aber bestimmt gleich raus.

    Na, da bin ich mal gespannt, wie schnell Du das herausfindest ;) .

    PS: Gibt es eine bessere / leichtere Möglichkeit als StringRegExp()?

    Für diese Problemstellungen sind Reguläre Ausdrücke meiner Meinung nach die beste Wahl (wenn auch alles andere als trivial :whistling: ).

    Hier ein leicht erweitertes Beispiel auf der Basis von AspirinJunkie 's Pattern. Es werden nun auch die IP-Adressen gefunden (zumindest das Muster) :

    Ein Problem hast Du ja bereits erkannt (und wurde von AspirinJunkie auch genannt). Bei diesem Pattern müssen die Top-Level-Domains (TLDs) explizit angegeben werden, also (?>de|com|net|org|co.uk) usw. - das macht es einfacher.

    Man kann sich eine Liste (fast) aller TLDs herunterladen, aber ob man die alle in die atomare Gruppe rein bekommt - ???.

    Banana_2_Day : EDIT

    Besser wäre es natürlich ein Muster zu erstellen, welches das "Ende der Domain" erkennt.

    Da gäbe es aber einiges zu berücksichtigen.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    2 Mal editiert, zuletzt von Musashi (4. August 2021 um 21:48)

  • Banana_2_Day -> kleiner Tipp am Rande :

    Wenn Du inhaltlich relevante Ergänzungen zu Deinem Thema postest, dann ist es meist besser einen neuen Beitrag zu erstellen. Ich habe nur durch Zufall gesehen, dass Du Beitrag #5 eine Minute nachdem ich #6 absendet habe editiert hast ;) .

    Falls Du nur bestimmte Mitglieder von der Editierung benachrichtigen möchtest, dann füge zumindest den/die gewünschten Benutzernamen ein, also z.B. Musashi (bei Tippfehlerkorrekturen ist das natürlich egal).

    Wäre folgendes ein Ansatz ohne Topleveldomain, die 2 bis 4 Zeichen enthalten?

    zu (1)

    \. gefolgt von 2 bis 4 Zeichen, gefolgt von /

    zu (2)

    \. gefolgt von 2 bis 4 Zeichen, gefolgt von ##

    Eine allgemeingültige Lösung wäre, aufgrund der Vielfalt (siehe Uniform_Resource_Identifier und Uniform_Resource_Locator) ziemlich aufwendig.

    Aus Quelle ublock entnehme ich aber, dass es Dir möglicherweise um (Sperr-)Listen des Adblockers uBlock von Origin geht. Solange die Anzahl der Varianten, also /... , ^..., ##... überschaubar bleibt, geht es wahrscheinlich auch ohne Top-Level-Domains.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Kannst Du das Pattern so umschreiben, dass es unabhängig von einer Topleveldomain ist?

    Laut Wiki gibt es ca. 1500 Topleveldomains.

    Es sind sehr viele unterschiedliche Topleveldomains.

    Ja klar ist das möglich aber im Zweifel wackliger.
    Warum sieht man schön anhand deines Ausschnittes wo die Datei plusone.js genannt wird.
    Diese stellt von ihrer Form allein, so wie sie ist, eine gültige Domain dar.

    Sie ist es jedoch bekanntlich nicht und soll auch nicht gematcht werden, aber das ergibt sich für uns nicht aus deren Aufbau, sondern erst aus dem Kontext in welchem sie steht.

    Es gibt daher zwei Möglichkeiten:

    1. Da .js keine gültige TLD ist, kann man (wie bisher) die TLDs auf eine bestimmte Liste eingrenzen. Das sind ca. 1500 und man kann sich das Pattern immer topaktuell direkt von AutoIt damit zusammenbauen lassen. Wie Musashi aber bereits schon anmerkte ist das Performance-mäßig nicht ganz die Wunschoption.
    2. Man fügt Kontext-Informationen hinzu. Also was darf vor der Domain stehen, was dahinter?
      Das hast du in deinem Vorschlag ja bereits getan wo du "gefolgt von / bzw. ##" vorgeschlagen hast.

    Nr. 2 habe ich mal umgesetzt: https://regex101.com/r/h4AaCM/6