FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Manul am 02 Mai 2017, 10:21:05

Titel: Perl regex Frage
Beitrag von: Manul am 02 Mai 2017, 10:21:05
Ich suche nach einer Regex, die einen string der Form ".*:.*:?.*" matcht, wenn es nach dem ersten Doppelpunkt nicht mit einem von mehreren festen strings weitergeht. Jemand eine Idee?
Titel: Antw:Perl regex Frage
Beitrag von: DeeSPe am 02 Mai 2017, 10:25:11
http://www.regextester.com/15

Gruß
Dan
Titel: Antw:Perl regex Frage
Beitrag von: Manul am 02 Mai 2017, 10:54:59
Danke! Hilt mir aber nicht - was ganz klar mein Fehler ist, weil ich meine Frage unvollständig gestellt habe. Neuer Versuch:

Ich suche nach einer Regex, die einen string der Form ".*:.*:?.*" matcht, wenn vor dem ersten Doppelpunkt eine bestimmte regex gematcht wird und es nach dem ersten Doppelpunkt nicht mit einem von mehreren festen strings weitergeht.
Titel: Antw:Perl regex Frage
Beitrag von: DeeSPe am 02 Mai 2017, 10:59:32
Dann musst Du bitte etwas mehr erklären!
Was darf vor dem Doppelpunkt matchen und was darf danach nicht matchen?
Gib doch mal ein konkretes Beispiel.

Gruß
Dan
Titel: Antw:Perl regex Frage
Beitrag von: Manul am 02 Mai 2017, 16:37:23
Danke, ich glaube, ich bin izwischen selbst drauf gekommen: Hintergrund war, daß ich in einem Logfile alle bis auf bestimmte events eines Zimmers/Stockwerks loggen möchte. Matchen soll also z.B.:

sz_lampe:on
sz_heizung:ValvePosition:0
sz_climate:humidity:55

Nicht matchen soll dagegen alles, was mit "D-firmware" oder "transmission-state" anfängt, also z.B.

sz_heizung:D-firmware:1.0
sz_heizung:transmission-state:outgoing publish sent

Mein Problem war, daß das negative lookahead immer am 2. Doppelpunkt gematcht hat. Die Lösung ist erschreckend offensichtlich: "[^:]*" statt ".*". Ich glaube also, mit der folgenden regex die Lösung gefunden zu haben:

^sz_[^:]*:(?!D-firmware|transmission-state).*