Hi nochmal! Oliver wrote:
From: Harry Rüter [mailto:harry_rueter@gmx.de] ich hoffe jemand von euch kennt sich mit regulären Ausdrücken aus ... Ich würde gerne folgerndes matchen :
Alle Adressen außer 192.168.1.1
grep -v ist Dein Freund. Und brav die Punkte escapen!
Habe jetzt 'ne Weile damit rumgespielt, kriegs aber nicht hin. Was mir fehlt (oder was ich nicht blicke) ist sowas wie eine Negation. echo "192.168.123.123"|grep -e "192.168.123.123" ergibt 192.168.123.123 und das ist korrekt. echo "192.168.123.123"|grep -v "192.168.123.123" ergibt "" und das ist korrekt, da das die Negation des ersten greps ist. Wenn ich nun aber nicht mit grep arbeite, sondern ein Programm in einer Konfigurationsdatei einen regulären Ausdruck verlangt, der das gleiche macht hilft mir der Parameter -v nicht weiter. Ich müßte wissen, wie ein regulärer Ausdruck aussieht, der irgendwie das "nicht der folgende Ausdruck" ergibt. Konkret , es handelt sich um die Konfigurationsdatei von openldap. Dort ist folgendes definiert : peername=<regex> <regex> wäre zu ersetzen durch "nicht 192.168.123.123" Kannst mir jemand dabei weiterhelfen ? Grüße Harry -- +++ GMX - Mail, Messaging & more http://www.gmx.net +++ NEU: Mit GMX ins Internet. Rund um die Uhr für 1 ct/ Min. surfen!
Hallo, Harry Rüter schrieb:
Oliver wrote:
From: Harry Rüter [mailto:harry_rueter@gmx.de] ich hoffe jemand von euch kennt sich mit regulären Ausdrücken aus ... Ich würde gerne folgerndes matchen :
Alle Adressen außer 192.168.1.1
[....]
<regex> wäre zu ersetzen durch "nicht 192.168.123.123"
Vielleicht hilft Dir [^Pattern] weiter... Gruss horst
*** Horst Mueller (hmkde@gmx.net) schrieb in suse-linux heute:
[...] Vielleicht hilft Dir [^Pattern] weiter...
regex kennt den Ausdruck, den Du oben andeutest, nicht! Was Du meinst, ist eine character class aber das wird ihm nicht helfen. MG Henning Hucke -- Sagt in Hiroshima vor der Atombombenexplosion die eine Fliege zur anderen: "Ich habe vorgestern noch den amerikanischen Praesidenten geaergert und er wollte mich auf jeden Fall persoenlich und mit den eigenen Haenden toeten. Die Drohung mit der Atombombe ist also belanglos, solange ich bei euch bin!". Fuer Begriffsstutzige: "Nimm Dich nicht zu wichtig!" (c) H. Hucke
* Am Don, 09 Jan 2003 schrieb Henning Hucke:
*** Horst Mueller (hmkde@gmx.net) schrieb in suse-linux heute:
[...] Vielleicht hilft Dir [^Pattern] weiter...
regex kennt den Ausdruck, den Du oben andeutest, nicht! Was Du meinst, ist eine character class aber das wird ihm nicht helfen.
Insofern ist vielleicht eher ein zweistufiges Vorgehen anzuraten: Mit einer Regex überhaupt nach IP-Adressen suchen und die dann hinterher noch mal (z.B. mit grep -v) auf Nichtübereinstimmung mit der einen nicht gewünschten absuchen. Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Harry Rüter wrote:
Oliver wrote:
From: Harry Rüter [mailto:harry_rueter@gmx.de] ich hoffe jemand von euch kennt sich mit regulären Ausdrücken aus ... Ich würde gerne folgerndes matchen :
Alle Adressen außer 192.168.1.1
Ich müßte wissen, wie ein regulärer Ausdruck aussieht, der irgendwie das "nicht der folgende Ausdruck" ergibt.
Was klappen koennte, ist folgendes: [^1][^9][^2][^.][^1][^6][^8][^.][^1][^2][^3][^.][^1][^2][^3] Das Problem ist dann noch das bereits ein weiteres Zeichen im Suchstring zu keinem Treffer fuehrt: $ echo -e "karl\nheinz\nkarl-heinz\nheinz karl" | egrep '[^k][^a][^r][^l]' heinz karl-heinz heinz karl im zweiten und dritten Fall trifft der String halt auf "arl-" oder "hein" zu. Wenn der Suchstring entsprechend keine weiteren Zeichen enthaelt, kann die Bracket Expression oben ausreichend sein. Peter
*** Peter Wiersig (wiersig-ml@dns.glamus.de) schrieb in suse-linux heute:
[...] Was klappen koennte, ist folgendes: [^1][^9][^2][^.][^1][^6][^8][^.][^1][^2][^3][^.][^1][^2][^3]
_Erst_ Hirn einschalten, _dann_ denken. Was ist beispielsweise mit "193.168.1.1"!? MG Henning Hucke -- Wer mir ungefragt Werbemüll an die private Mailadresse schickt, erklärt sich mit der Zusendung der X11-Sourcen via FTP-Mail und einer Entschädigungszahlung an mich einverstanden. Die Zustimmung gilt mit der Absendung der email an mich als erteilt. (c) unbekannt
Henning Hucke wrote:
*** Peter Wiersig (wiersig-ml@dns.glamus.de) schrieb in suse-linux heute:
[...] Was klappen koennte, ist folgendes: [^1][^9][^2][^.][^1][^6][^8][^.][^1][^2][^3][^.][^1][^2][^3]
_Erst_ Hirn einschalten, _dann_ denken.
Was ist beispielsweise mit "193.168.1.1"!?
Stimmt, da haben wir mehr Probleme als ich erst gesehen habe. Peter
* Peter Wiersig schrieb am 09.Jan.2003:
Harry Rüter wrote:
Oliver wrote:
From: Harry Rüter [mailto:harry_rueter@gmx.de]
Alle Adressen außer 192.168.1.1
Sowas ist problematisch mit Regexp zu machen. Prinzipiell. Regexp überprüft Teilstrings ob sie mit einem Muster übereinstimmen. Nicht übereinstimmen ergibt folgendes Problem: Wenn Du die Adresse 192.168.1.1 hast, so stimmt der Teilstring 192.1 nicht mit der ganzen Adresse überein, und ergibt somit einen Erfolg. Das macht schon die 1 und die 9 und ... Wenn Der String alleine in einer Zeile steht, kannst Du folgendes machen: ^[^1]|^.[^9]|^..[^2]|^...[^.]|^....[^1] usw. Dabei muß Regexp oder können, manchmal muß es auch \| heißen, jenachdem. Wenn Dein Regexp Zähler der Art {1,12} bzw. \{3,17\} hat, so kann man sich das noch was einfacher machen. Aber so richtig einfach ist das alles nicht.
Was klappen koennte, ist folgendes: [^1][^9][^2][^.][^1][^6][^8][^.][^1][^2][^3][^.][^1][^2][^3]
Nee, so funktioniert das nicht. Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
Hi, Bernd Brodesser schrieb am 09.01.2003 18:25:
* Peter Wiersig schrieb am 09.Jan.2003:
Harry Rüter wrote:
Oliver wrote:
From: Harry Rüter [mailto:harry_rueter@gmx.de]
Alle Adressen außer 192.168.1.1
Sowas ist problematisch mit Regexp zu machen. Prinzipiell. Regexp überprüft Teilstrings ob sie mit einem Muster übereinstimmen. Nicht übereinstimmen ergibt folgendes Problem:
Wenn Du die Adresse 192.168.1.1 hast, so stimmt der Teilstring 192.1 nicht mit der ganzen Adresse überein, und ergibt somit einen Erfolg. Das macht schon die 1 und die 9 und ...
Wenn Der String alleine in einer Zeile steht, kannst Du folgendes machen:
^[^1]|^.[^9]|^..[^2]|^...[^.]|^....[^1] usw.
Leider fehlt mir der Anfang vom thread, wie wär's mit ein wenig perl: $IP =~ m/(^(?!(192\.168\.1\.1))([01]?\d\d?|2[0-4]\d|25[0-5])\. ([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\. ([01]?\d\d?|2[0-4]\d|25[0-5]))$/; -hth -Jörg
Hi, bin nicht der Regex Held, aber vielleicht hilfs ja das '!' - Zeichen. Das wird häufig zur Negierung verwendet: !192\.168\.123\.123 oder so. Ciao Sascha -- http://www.livingit.de linux at programmers-world dot com http://www.mobile-bookmarks.info http://www.programmers-world.com Mail geschrieben: Donnerstag, den 09. Januar 2003 um 15:05
Sascha Andres wrote:
bin nicht der Regex Held, aber vielleicht hilfs ja das '!' - Zeichen. Das wird häufig zur Negierung verwendet: !192\.168\.123\.123 oder so.
ach mann Sascha. was ist denn das bitte für ein quoting? 'http://learn.to/quote' na ja, beim nächsten mal dann ... ;) micha
Dennis Stosberg wrote:
was ist denn das bitte für ein quoting?
Ich schätze, das Ausrufezeichen soll kein quoting sein, sondern eine Negation des darauf folgenden Ausdrucks bewirken.
ja, im schätzen bist du gut. :) schaue dir seine mail bitte noch einmal an, und sage mir _wieviele_ gequotete zeilen des vorredners du findest. ich finde genau 0. das ist echt wenig, oder? micha
participants (10)
-
B.Brodesser@t-online.de
-
Christoph Maurer
-
Dennis Stosberg
-
Harry Rüter
-
Henning Hucke
-
Horst Mueller
-
Joerg Zimmermann
-
Michael Meyer
-
Peter Wiersig
-
Sascha Andres