RegEXP ein Wort aussschließen
Walter
- perl
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
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.
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
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
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.
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
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.
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
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
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:|
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
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
Hi,
von MudGard
He, ich bin doch kein matschiges Haarspray ...
cu,
Andreas
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
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
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
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