PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Reguläre Ausdrücke..." (Filter-Regeln)?



tatebaer
07.01.2008, 22:41
Hallo.

Was ist mit "Regulären Ausdrücken durch Kommata getrennt" gemeint?

Es ist mir schon klar das ich hier zB. durch Kommata getrennte Adressen oder Textfolgen angeben kann um so Telegramme Durchzulassen oder Zurückzuweisen.

Reguläre Ausdrücke klingt für mich aber so als ob man hiermit noch einiges mehr machen kann. Leider finde ich weder in POC32, noch in diesem Forum etwas mehr zu diesem Thema.

Hat vielleicht schon Jemand herausgefunden ob man hier noch etwas mehr wie nur durch Kommata getrennte Textfolgen als Filter definieren kann?

Gibt es zB. Platzhalter?
Kann man die Anwendung eines Filter nur auf die Adresse oder den Nachrichtetext begrenzen?

Ich fände es toll wenn Ihr hier mal über Eure Erfahrungen zu diesem Thema berichtet.

felix000
07.01.2008, 22:43
http://de.wikipedia.org/wiki/Regulärer_Ausdruck

tatebaer
07.01.2008, 22:54
Aus der Wikipedia:

"... Die jeweiligen Regexp-Implementierungen sind jedoch nicht alle gleich. In den Programmiersprachen haben sich überwiegend die PCRE durchgesetzt, die sich an der Umsetzung in Perl orientieren. Daneben wird – vor allem in der Linux-Welt – z. B. zwischen BRE (basic regular expressions) und ERE (extended regular expressions) unterschieden.
Einige Programme wie z. B. der Texteditor vim bieten die Möglichkeit, zwischen verschiedenen Regexp-Umsetzungen hin- und herzuschalten. ..."

Bedeutet doch das es von Programmiersprache zu Programmiersprache bzw. von Programm zu Programm Unterschiede gibt.

tatebaer
07.01.2008, 23:09
Ich habe eine Nachricht in der auch das Wort "Garten" vorkommt.

Ich habe nun folgende Ausdrücke aus der Wikipedia probiert:

Bei Treffer sollen die Filter zurückweisen.

[:lower:]arten (sollte das Telegramm anzeigen, macht es auch)
[:upper:]arten (sollte das Telegramm zurückweisen, zeigt es aber an)
[:space:]Garten (sollte das Telegramm zurückweisen, zeigt es aber an)

Die Wikipedia scheint also nicht die wirkliche Lösung zu sein.

Buebchen
07.01.2008, 23:53
Das alter von POC32 berücksichtigend würde ich es etwas einfacher angehen.

z.B.

[a-f|h-z|]arten

sollte gerade nicht auf garten zu treffen. Aber auf warten.

Wenn ich das mal eben durchspiele ist POC32 auch nicht case-sensitive. Das entfällt also direkt als Kriterium .

[w|g]arten trifft z.B. auf Garten zu.

Ebenso wird auch kein Whitespace \s Unterstützt. Wohl aber das echte, eingegebenen Leerzeichen (z.B. "kein [a-g]arten") trifft nicht auf "wir gehen in den garten" zu. Wohl aber auf "Da ist kein Garten".

Soweit erstmal klar ?

tatebaer
08.01.2008, 00:27
Jawohl Buebchen.

Deine Beispiele habe ich eben als Filter ausprobiert. Sie funktionieren so wie du es beschrieben hast. Soweit habe ich es auch verstanden.

Wie würde dann ein Filter aussehen um zB. alle Adressen von 1185000 bis 1354999 auszublenden?

Ich werde mal versuchen selber eine Lösung zu finden, aber vielleicht ist es für Dich ja ganz einfach.

Buebchen
08.01.2008, 09:03
118[5-9]*,
119*,
12*,
13[0-4]*,
135[0-4]*

müßte gehen.

elsterine
08.01.2008, 12:16
Also diese Variante funktioniert bei mir auch nicht! Hab POC 2.13

Gibts noch andere Ideen, um ganze Bereiche zu filtern (zu unterdrücken), z.B. alles was mit 0, 2, 3, 4, 5, 6, 7, 8, 9 beginnt ?

Buebchen
08.01.2008, 13:45
Also es wäre schön, wenn dann etwas mehr input kommt
- Werden zu viele gefiltert
- werden keine gefiltert
- werden nur einige nicht gefiltert ?

Nun gut, folgendes geht bei mir:

118[5000-9000],
119[0000-9999],
12[00000-99999],
13[00000-49999],
135[0000-4999]

tatebaer
08.01.2008, 14:05
Um Adressen die mit 0,2,3,4,5,6,7,8 und 9 beginnen zu unterdrücken sollten zwei Wege möglich sein.

1. mit Filterfunktion "Zurückweisen"

[0]\d\d\d\d\d\d;
[2]\d\d\d\d\d\d;
[3]\d\d\d\d\d\d;
[4]\d\d\d\d\d\d;
usw.

Der Filter sollte nun treffen wenn die Zeichenfolge mit 0,2,3,4,5,6,7,8 oder 9 beginnt und im Anschluss noch 6 Zahlen folgen.

2. mit Filterfunktion "Durchlassen"

[^0]\d\d\d\d\d\d;
[^2]\d\d\d\d\d\d;
[^3]\d\d\d\d\d\d;
[^4]\d\d\d\d\d\d;
usw.

Der Filter sollte nun treffen wenn die Zeichenfolge NICHT (darum ^ vor der Zahl) mit 0,2,3,4,5,6,7,8 oder 9 beginnt und im Anschluss 6 Zahlen folgen.


Soweit die Theorie wenn ich das mit diesen Regulären Ausdrücken richtig verstehe. Aber in der Praxis funktioniert es anscheinend auch nicht. Zumindest hier funktioniert es nicht.

Ist schon seltsam.

tatebaer
08.01.2008, 14:16
@Buebchen

zB.
[0]\d\d\d\d\d\d trifft nicht auf 0173793
[2]\d\d\d\d\d\d trifft nicht auf 2108262
usw.

elsterine
08.01.2008, 14:18
Obige Variante funktioniert nicht !!!!

tatebaer
08.01.2008, 14:27
Es gibt ein nettes Programm mit dem man Filter erstellen und testen kann.

http://www.cfregex.com/visualregex/kregexpeditor.zip

Zum einen kann man Reguläre Ausdrücke in ASCII erstellen. Dann besteht aber auch die Möglichkeit Reguläre Ausdrücke durch das Einfügen von Ausdrücken über Symbole zu erstellen. Zum Testen kann man beliebige Texte in ein Feld eingeben oder laden.

Vielleicht ganz hilfreich um Reguläre Ausdrücke auch einmal unabhängig von der anscheinend etwas eigenwilligen Implementierung in POC32 zu testen.

[0]\d\d\d\d\d\d oder auch [0]\d{6} trifft hier zB. 0173793

Buebchen
08.01.2008, 17:47
@Buebchen

zB.
[0]\d\d\d\d\d\d trifft nicht auf 0173793
[2]\d\d\d\d\d\d trifft nicht auf 2108262
usw.


Obige Variante funktioniert nicht !!!!




Vielleicht ganz hilfreich um Reguläre Ausdrücke auch einmal unabhängig von der anscheinend etwas eigenwilligen Implementierung in POC32 zu testen.

[

tatebaer hat es erfasst und das sollte mein ersten Posting schon klarstellen: Reguläre Ausdrücke sind ein komplexes Thema. Man kann damit nicht nur Filter erstellen. Man kann ganze Zeichenketten auf ein Muster prüfen und Teile davon dann extrahieren. Wobei das auch von der einzelnen Implementierung des regex abhängt. Und die von POC32 ist eher einfach gehalten.
Statt \d würde ich mal [0-9] versuchen ... Vielleicht reicht das schon. Von Negierungen würde ich abstand nehmen :-)

elsterine
08.01.2008, 18:05
Also beides klappt nicht (weder \d noch das mit den eckigen Klammern). Schade!

Hubi
31.01.2008, 20:43
Moin
Seh ich as richtig das ich entweder nur druchlassen kann oder nur zurückweisen kann? Gibt es keine möglichkeit einen teil durch zulassen und dabei eine aktion druchzuführen und bei anderen die zu blocken?

nederrijner
18.04.2010, 14:27
Ich krame den Thread mal wieder hoch, vielleicht kennt sich ja jemand mit diesen regulären Ausdrücken aus:

Ich würde gerne auf alles filtern, was nicht die Zeichenkette " *" am Ende enthält (also Leerzeichen + Sternchen ohne die Anführungszeichen.

Geht das irgendwie?

Andi-Hamburg
17.07.2010, 20:45
Bei mir klappt es anscheindend, sieht bei mir so aus: (will nur alle RIC mit "06" angezeigt bekommen)

[00]\d\d\d\d\d,
[10]\d\d\d\d\d,
[11]\d\d\d\d\d,
[12]\d\d\d\d\d,
[01]\d\d\d\d\d,
[02]\d\d\d\d\d,
[03]\d\d\d\d\d,
[04]\d\d\d\d\d,
[05]\d\d\d\d\d,
[07]\d\d\d\d\d,
[08]\d\d\d\d\d,
[09]\d\d\d\d\d,

Filter=Zürückweisen

Gruß Andi

faboi
17.07.2010, 21:07
Funktioniert bei mir leider nicht. Hab verschiedene Kombinationen getestet...

Andi-Hamburg
17.07.2010, 21:19
Funktioniert bei mir leider nicht. Hab verschiedene Kombinationen getestet...

Hmm, bei mir bis jetzt einwandfrei. Ich musste aber auch die " ; " durch " , " ersetzen. Vorher ging es bei mir auch nicht.

Gruß