Walter: RegEXP ein Wort aussschließen

Hallo,

wie kann ich mit RegEXP ein Wort ausschließen?

Im konkreten Fall will ich aus einem Logfile mit
Domains und Subdomains alle Einträge außer
'statistik.domain.de' haben.

Also 'sub1.domain.de, sub2.domain.de, domain.de',
aber eben nicht 'statistik.domain.de'.

Wie kann ich die RegEXP aufbauen?

So etwas wie [^statistik].domain.de$ klappt nicht,
weil ich mit [^s] ja nur einzelne Buchstaben ausschließen kann?

Hat da jemand einen einfachen Tipp für mich?

Danke!

Bis dann,

Walter

  1. hallo,

    Im konkreten Fall will ich aus einem Logfile mit
    Domains und Subdomains alle Einträge außer
    'statistik.domain.de' haben.

    Das ist nicht konkret genug, weil dich vermutlich nicht die Domains interessieren, sondern das, was sie als Serverantwort (oder Systemantwort) erhalten haben. Du willst also nicht "Namen" ausschließen, sondern _Zeilen_ aus deinem log streichen.

    Also 'sub1.domain.de, sub2.domain.de, domain.de',
    aber eben nicht 'statistik.domain.de'.

    In den angegebenen strings ist überall als Teilstring noch "domain.de" enthalten. Warum?

    So etwas wie [^statistik].domain.de$ klappt nicht,
    weil ich mit [^s] ja nur einzelne Buchstaben ausschließen kann?

    Jaein. Erst einmal könntest du dich in dem immer noch ziemlich ausgereiften SELFHTML-Kapitel über Reguläre Ausdrücke umschauen. Wichtiger ist aber, daß du das Script, mit dem du es bisher versucht hast, zugänglich machst. So ganz allgemein und theoretisch würde man sonst auf die Glaskugel zurückgreifen müssen.

    Hat da jemand einen einfachen Tipp für mich?

    Kommt drauf sn, was du unter "einfach" verstehst ;-)

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo,

      Das ist nicht konkret genug, weil dich vermutlich nicht die Domains interessieren, sondern das, was sie als Serverantwort (oder Systemantwort) erhalten haben. Du willst also nicht "Namen" ausschließen, sondern _Zeilen_ aus deinem log streichen.

      Jein. Ganz konrekt geht es um folgendes:

      Ich benutze AWStats zur Logilfeanalyse. Ich dachte mir, dass das
      vielleicht zu speziell ist. Darum hatte ich einfach allgemein
      nach einer Möglichkeit gefragt.

      Dort kann u.a. die Logfiles auf VirtuelleHosts bzw. Subdomains
      einschränken.

      Ich brauchte also wirklich nur die RegEXP finden, die mir nur
      alle (Sub-)Domains bis auf 'statistik.domain.de' liefert.

      Ich kann dort in einer Zeile halt die virtuellen Hosts eintragen,
      welche man aus dem gesamten Logfile ausgewertet haben möchte.

      Damit will ich verhindern, dass Aufrufe auf die Statistik
      mit einfließen.

      Perl, weil AWStats in Perl geschrieben wurde, bzw. die RegEXP in Perl ausgewertet wird.

      Also 'sub1.domain.de, sub2.domain.de, domain.de',
      aber eben nicht 'statistik.domain.de'.

      In den angegebenen strings ist überall als Teilstring noch "domain.de" enthalten. Warum?

      Weil das Logfile so aufgebaut ist und ich bei meinem Hoster die
      Logfiles leider nicht im Aufbau beeinflussen kann.

      So etwas wie [^statistik].domain.de$ klappt nicht,
      weil ich mit [^s] ja nur einzelne Buchstaben ausschließen kann?

      Jaein. Erst einmal könntest du dich in dem immer noch ziemlich ausgereiften SELFHTML-Kapitel über Reguläre Ausdrücke umschauen. Wichtiger ist aber, daß du das Script, mit dem du es bisher versucht hast, zugänglich machst. So ganz allgemein und theoretisch würde man sonst auf die Glaskugel zurückgreifen müssen.

      Es gibt so gesehen kein Script dazu.

      Ich habe mir das Kapitel noch einmal angeschaut, aber kann bzgl. des
      Wortausschluß nichts konkretes entdecken, was mir zu diesem Problem
      weiterhilft.
      (Bin aber leider nicht wirklich fitt in RegExp.)

      Mir würde einfach eine RegExp genügen. Ich kann dort auch nicht mehr angeben.

      Hat da jemand einen einfachen Tipp für mich?
      Kommt drauf sn, was du unter "einfach" verstehst ;-)

      Das weiß ich ja auch noch nicht ;-)

      Bis dann,

      Walter

      1. Hallo Walter,
        mit den regulären sthe ich selbst auf Kriegsfuß.

        Aber dein Problem verstehe ich schon und die Lösung wüsste
        ich auch gerne.

        Du willst sowas einfaches wie ^haseigel haben um einen
        String auszuschliessen. Fände auch schön wenn
        es diese einfache Möglichkeit gäbe. Gibts anscheinend auch mit
        negativen assertions.

        Ich kenne mich wie geasagt nicht damit aus aber vielleicht hilft
        "dir" dieser Thread weiter. Denn da gehts am threadende genau darum.

        http://forum.de.selfhtml.org/archiv/2006/8/t134250/#m870645

        Gruss
        Wolke

        1. Hallo,

          es diese einfache Möglichkeit gäbe. Gibts anscheinend auch mit
          negativen assertions.

          Ich kenne mich wie geasagt nicht damit aus aber vielleicht hilft
          "dir" dieser Thread weiter. Denn da gehts am threadende genau darum.

          http://forum.de.selfhtml.org/archiv/2006/8/t134250/#m870645

          Danke für den Link. Das war es.

          Ich konnte es wie in dem Post von MudGuard umsetzen.

          In dem von dir genannten Thread ist in diesem Posting genau so ein Beispiel:
          http://forum.de.selfhtml.org/archiv/2006/8/t134250/#m871750

          Leider fehlten mir wohl die richtigen Suchbegriffe für mein Problem.

          Bis dann,

          Walter

      2. hallo,

        Ich benutze AWStats zur Logilfeanalyse. Ich dachte mir, dass das
        vielleicht zu speziell ist.

        Nein, AWStats ist durchaus nicht unbekannt.

        Ich kann dort in einer Zeile halt die virtuellen Hosts eintragen,
        welche man aus dem gesamten Logfile ausgewertet haben möchte.

        Aber offenbar hat das ja irgendwie nicht geklappt.

        In den angegebenen strings ist überall als Teilstring noch "domain.de" enthalten. Warum?
        Weil das Logfile so aufgebaut ist und ich bei meinem Hoster die
        Logfiles leider nicht im Aufbau beeinflussen kann.

        Also kannst du eben doch nicht alles in AWStats eintragen. Wo ist das denn in Gebrauch? Auf deinem eigenen Rechner? Oder bei deinem Provider?

        Es gibt so gesehen kein Script dazu.

        Doch, gibt es, bloß betreibt das vermutlich dein Hoster.

        Mir würde einfach eine RegExp genügen. Ich kann dort auch nicht mehr angeben.

        AMStats verfügt über eine Hilfe, und es gibt eine Dokumentation.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hallo,

          Nein, AWStats ist durchaus nicht unbekannt.

          Das ist richtig. Allerdings hat es mit meinem Problem so
          gesehen nicht in erster Linie etwas zu tun.
          Und damit die Leute die zwar Ahnung von RegExp aber nicht
          unbedingt von AWSTats haben, nicht 'abgeschreckt' werden,
          hatte ich die Anfrage allgemein formuliert.

          Ich kann dort in einer Zeile halt die virtuellen Hosts eintragen,
          welche man aus dem gesamten Logfile ausgewertet haben möchte.

          Aber offenbar hat das ja irgendwie nicht geklappt.

          Richtig! Darum ja meine Frage.

          In den angegebenen strings ist überall als Teilstring noch "domain.de" enthalten. Warum?
          Weil das Logfile so aufgebaut ist und ich bei meinem Hoster die
          Logfiles leider nicht im Aufbau beeinflussen kann.

          Also kannst du eben doch nicht alles in AWStats eintragen. Wo ist das denn in Gebrauch? Auf deinem eigenen Rechner? Oder bei deinem Provider?

          Wie? Warum kann ich das nicht alles eintragen?
          Das ist bei meinem Provider, von mir installiert in Gebrauch.

          Es gibt so gesehen kein Script dazu.
          Doch, gibt es, bloß betreibt das vermutlich dein Hoster.

          Nein, habe ich da hininstalliert. Das Script gibt es, das
          ist richtig. Aber es wertet einfach nur die RegExp aus der
          Konfig-Datei aus. Und das mit der Perl-Syntax.

          Wenn es also eine RegExp geben würde, die das genannte erledigt,
          dann wäre ich damit durchaus 100% zufrieden.

          Ansonsten müßte man wohl wirklich den AWStats-Code erweitern...

          Mir würde einfach eine RegExp genügen. Ich kann dort auch nicht mehr angeben.

          AMStats verfügt über eine Hilfe, und es gibt eine Dokumentation.

          Durchaus bekannt. Und genau da findet sich folgendes:
          http://awstats.sourceforge.net/docs/awstats_config.html#HostAliases

          Wo ich genau das 'alles' eintragen kann.

          Nur um es noch einmal deutlich zu sagen: Meiner Ansicht nach liegt
          mein Problem jetzt weniger bei AWStats und dessen Konfiguration,
          denn die klappt wunderbar.

          Es geht nur um das Ausschluß-Problem, denn mit RegExp stehe ich auf dem Kriegsfuß.

          Bis dann,

          Walter

  2. Hey,
    negiere die Bedingung statt des Ausdrucks.

    while (<DATA>) {  
        print unless /statistik\.domain\.de/;  
    };  
      
    __DATA__  
    sub1.domain.de  
    sub2.domain.de  
    domain.de  
    statistik.domain.de
    
    --
    水-金-地-火-木-土-天-海-冥
    1. hallo,

      negiere die Bedingung statt des Ausdrucks.

      Sehr gut.

      while (<DATA>) {

      print unless /statistik.domain.de/;
      };
      DATA
      sub1.domain.de
      sub2.domain.de
      domain.de
      statistik.domain.de

        
      Interessanter Vorschlag - und dürfte sogar funktionieren. Nur: wie ich bereits angemerkt habe, geht es höchstwahrscheinlich gar nicht \_nur\_ um diese Domainnamen. Logfiles, sofern sie nicht aus einer bereits spezifizierten Konfigurationsdatei eines Dienstes entstehen, enthalten in der Regel "hinter" den Domainnamen noch weitere Eintragungen, und ich vermute, daß es nicht ausreicht, nur einfach diese "Namen" zu ignorieren.  
        
      Allerdings ist das eben eine Mutmaßung.  
        
        
      Grüße aus Berlin  
        
      Christoph S.
      
      -- 
      [Visitenkarte](http://community.de.selfhtml.org/visitenkarten/view.php?key=26)  
        
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
      
      1. gudn tach!

        while (<DATA>) {

        print unless /statistik.domain.de/;
        };
        DATA
        sub1.domain.de
        sub2.domain.de
        domain.de
        statistik.domain.de

        
        >   
        > [...] geht es höchstwahrscheinlich gar nicht \_nur\_ um diese Domainnamen. Logfiles, sofern sie nicht aus einer bereits spezifizierten Konfigurationsdatei eines Dienstes entstehen, enthalten in der Regel "hinter" den Domainnamen noch weitere Eintragungen  
          
        wenn jeweils die ganze zeile extrahiert werden soll, die diese statistik-subdomain nicht enthaelt, ist der code-schnipsel immer noch ohne aenderung anwendbar.  
        wenn \_nur\_ die domains extrahiert werden sollen, obwohl (innerhalb der zeile) davor oder dahinter noch zeug steht, dann koennen die von MudGard vorgeschlagenen negative look-behinds hilfreich sein.  
          
        in etwa so:  
        print $1 if /([a-z0-9]+(?<!statistik)\.example\.org)/;  
          
        prost  
        seth
        
        1. Hallo,

          wenn _nur_ die domains extrahiert werden sollen, obwohl (innerhalb der zeile) davor oder dahinter noch zeug steht, dann koennen die von MudGard vorgeschlagenen negative look-behinds hilfreich sein.

          in etwa so:
          print $1 if /([a-z0-9]+(?<!statistik).example.org)/;

          Es ging in meinem speziellen Fall wirklich nur um die RegExp,
          da der andere Kram durch ein fertiges Script erledigt wurde.

          Trotzdem nochmal Danke für den Script-Vorschlag.

          Bis dann,

          Walter

        2. Hi,

          von MudGard

          He, ich bin doch kein matschiges Haarspray ...

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. gudn tach!

            von MudGard

            He, ich bin doch kein matschiges Haarspray ...

            es ist gar nicht so einfach, den namen schnell zu tippen. bei meinem ersten versuch kam "MudDard" heraus. beim tippen ist mir noch aufgefallen, dass da irgendwas verkehrt gewesen ist, also habe ich schnell das offensichtlich falsche "D" ersetzt, aber nicht gemerkt, dass das "u" noch fehlte, sorry.

            ich uebe mal ein wenig:
            MudGuard
            MudGuRD]
            MudGuard
            Mudguard
            MuGdufa
            MudGuard
            MudGuard
            MudGuard
            MudGuard
            MudGuard
            MudGuard
            MudGuard
            ha, jetzt geht's so langsam, cool!

            prost
            seth

            1. Hello out there!

              es ist gar nicht so einfach, den namen schnell zu tippen.

              Du hattest noch Glück: http://forum.de.selfhtml.org/archiv/2005/2/t100307/#m614632 f. ;-)

              See ya up the road,
              Gunnar

              --
              “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
  3. Hi,

    wie kann ich mit RegEXP ein Wort ausschließen?

    negative Lookarounds.
    Diese werden aber nicht von allen Regex-Maschinen unterstützt.

    So etwas wie [^statistik].domain.de$ klappt nicht,

    (?<!statistik).example.org

    (domain.de solltest Du nur dann benutzen, wenn Du tatsächlich die existierende domain.de meinst, für Beispiele sind example.net, example.org, example.com vorgesehen)

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo,

      negative Lookarounds.
      Diese werden aber nicht von allen Regex-Maschinen unterstützt.

      Das ist wirklich das, was ich gesucht habe!

      So etwas wie [^statistik].domain.de$ klappt nicht,

      (?<!statistik).example.org

      Genauso hat es bei mir funktioniert! Vielen Dank!

      Das habe ich im SelfHTML-Tutorial so leider nicht entdeckt.

      (domain.de solltest Du nur dann benutzen, wenn Du tatsächlich die existierende domain.de meinst, für Beispiele sind example.net, example.org, example.com vorgesehen)

      Ah, OK. Merke ich mir..

      Bis dann,

      Walter