FHEM/Perl Verschachtelungen

Begonnen von MaxAut, 19 Juni 2016, 13:02:23

Vorheriges Thema - Nächstes Thema

Benni

Da kann ich dir jetzt leider auch nicht weiterhelfen, da müssen dir RegEx-Profis antworten. Ich weiß nur wie man mit RegEx einschließt (match). Ob und wie man bei RegEx ausschließen würde mich aber auch interessieren.

Ansonste, wie es für deinen Use-Case mit der 2. RegEx beim Watchdog funktionieren kann habe ich ja weiter oben schon geschrieben.
Bin an der Stelle leider raus.


Benni

RTFM? Einverstanden!  :-[  ;)

Es dürfte etwas genauer wohl dieser Abschnitt sein:

https://wiki.selfhtml.org/wiki/Perl/Regul%C3%A4re_Ausdr%C3%BCcke#Assertions_.E2.80.93_Einbeziehung_des_Kontexts

und wenn ich es richtig verstanden habe, müsste der Ausdruck dann it etwa so enden:

(?!closed)

MaxAut

#33
Nur die RegEx alleine ist nicht so schwierig; da findet man ja im Internet genug dazu, wie auch unter anderem den genannten Artikel. Wobei ich dennoch damit auf Kriegsfuß stehe; RegEx, genauso wie Perl, haben für mich eine unlogische Syntax. Anyways, ich wüsste nur gerne wie man es dann mit FHEM kombiniert. Wäre es dann TFKontaktEingang.(?!closed) ? Oder ohne Klammern, oder sonst irgendwie? Gebt doch mal ein simples Beispiel für eine RegEx in einem FHEM Kommando die nicht einen Standardstatus abfragt, sondern eben etwas mehr, wie z.B. verneint, oder mit mehr als nur .* am Ende arbeitet. Das wäre wesentlich einfacher, zweckdienlicher, weniger Aufwand für alle und daher schneller, als hier 3 Seiten mit Kommentaren zu füllen ...

Benni

Zitat von: MaxAut am 26 Juni 2016, 19:11:14
Das wäre wesentlich einfacher, zweckdienlicher, weniger Aufwand für alle und daher schneller, als hier 3 Seiten mit Kommentaren zu füllen ...

Na ja, du enthälst ja auch so einiges an Information zurück was du schon ausprobiert und gelesen hast.

Zitat von: MaxAut am 26 Juni 2016, 19:11:14
Nur die RegEx alleine ist nicht so schwierig; da findet man ja im Internet genug dazu, wie auch unter anderem den genannten Artikel.

TFKontaktEingang.(?!closed).*

sollte funktionieren.






Prof. Dr. Peter Henning

ZitatGebt doch mal ein simples Beispiel für eine RegEx in einem FHEM Kommando die nicht einen Standardstatus abfragt, sondern eben etwas mehr, wie z.B. verneint, oder mit mehr als nur .* am Ende arbeitet. Das wäre wesentlich einfacher, zweckdienlicher, weniger Aufwand für alle und daher schneller, als hier 3 Seiten mit Kommentaren zu füllen ...
Das ist sicher nicht richtig. 

ZitatRegEx, genauso wie Perl, haben für mich eine unlogische Syntax
Das ist noch weniger richtig. Reguläre Ausdrücke haben eine sehr klare mathematisch begründete Syntax, von "unlogisch" kann dabei ebenso wenig die Rede sein, wie bei der Syntax von Perl. Man muss sich halt mal selbst bemühen.

LG

pah

MaxAut

#36
Danke Benni für das Beispiel! Endlich mal ein konkreter und brauchbarer Input! Zurückgehalten habe ich keine Informationen, jedenfalls nicht bewusst. In dem Thread habe ich mehrmals ganz genau geschrieben was ich machen möchte und was genau ich mit der RegEx abfragen möchte.

Eine Frage noch am Schluss: Wozu das .* am Ende? Warum ist TFKontaktEingang.(?!closed) nicht eindeutig?

marvin78

.* muss nicht zwingend dahinter. Es steht für "und alles weitere, was folgt" (umgangsprachlich). Es kommt auf das Event an. Bitte mit der Materie tatsächlich beschäftigen. Man kann das ganze ja auch mal ausprobieren, wenn man sich nicht sicher ist.

BTW: Es ist nichts verkehrt daran, jemandem zu empfehlen, sich mit der Thematik auseinander zu setzen. Hier gibt es also ein klares Beispiel für den Missbrauch des unsäglichen Bewertungssystems. An Peter Hennings Aussage ist nichts falsch oder wenig hilfreich.

Für Anfänger bezüglich regulärer Ausdrücke halte ich das hier für sehr gelungen:

https://danielfett.de/de/tutorials/tutorial-regulare-ausdrucke/

Und Peter Henning hat schon recht. Arbeitet man sich, wie empfohlen, in die Materie ein, sieht man sehr schnell dass reguläre Ausdrücke sehr wohl sehr logisch sind und man damit auch schnell zu Ergebnissen kommt. Die Empfehlung, sich damit zu beschäftigen führt dann sehr wohl zu kürzeren Threads, wenn die Leute der Empfehlung nachkommen.

MaxAut

Was .* bedeutet ist mir klar. Wäre meine Frage vollständig gelesen worden, hätte auch die Chance bestanden sie richtig zu verstehen: Ich wollte wissen warum .* am Ende notwendig ist, warum es ohne das nicht eindeutig gewesen wäre. Ich wollte NICHT wissen was .* grundsätzlich bedeutet.

Ein Missbrauch des Bewertungssystems? Spannend ... ist es nicht dazu da den persönlichen Gefallen an einer Antwort zum Ausdruck zu bringen? Für mich war PAH's Antwort unbrauchbar, und zudem wertend wo es nichts zu werten gab. Einen subjektiven Eindruck kann man nicht mit richtig oder falsch bewerten. Sollte es übrigens tatsächlich ein "Missbrauch" sein, so befinde ich mich zumindest in guter Gesellschaft, nachdem PAH meine Antwort mit der gleichen Bewertung versehen hat ;-).

ps: Kann dann bitte jemand diesen Thread schließen? Diese Diskussion ist unnötig. Danke.

marvin78

#39
Und wieder hat dir jemand einen hilfreichen Tipp gegeben und du schmeist ihn weg. So kommst du sicher vorwärts.

Wenn du dir das Event anschaust und dir klar darüber bist, was .* macht, kommst du darauf, warum es nötig ist. Ich bin nicht sicher, ob es hier nötig ist. Das findest du aber schnell heraus. Es ist für die Fälle (Events), in denen noch was folgt. Das kann auch ein Leerzeichen sein.

Du bist der Themenstarter. Also kannst du das Thema auch schließen. Sicher ist das nur sinnvoll, wenn du es auch vorher auf gelöst setzt (siehe angepinnte Beiträge).