Hauptmenü

Perl regex Frage

Begonnen von Manul, 02 Mai 2017, 10:21:05

Vorheriges Thema - Nächstes Thema

Manul

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?

DeeSPe

MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Manul

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.

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Manul

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).*