FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: franky08 am 04 Januar 2016, 23:27:42

Titel: [gelöst] kurze Frage zu regex
Beitrag von: franky08 am 04 Januar 2016, 23:27:42
Ich teste jetzt schon seit einer Stunde an einer regex um den numerischen Teil eines Readings vom alphanumerischen "abzuschneiden"

Beispiel: Reading ist name:Ziffer
wie kann ich daraus nur auf "Ziffer" matchen?

/\d/ geht nicht genau wie /[0-9]/ und dann bleibt auch noch :

ist auch schon spät, vlt. morgen noch einmal in Ruhe angehen, mache jetzt sowie so nicht weiter

Falls jemand die Antwort parat hat, gerne

VG
Frank
Titel: Antw:kurze Frage zu regex
Beitrag von: justme1968 am 04 Januar 2016, 23:40:30
\d und [0-9] sollte beides gehen. zeig mal was du genau machst.

gruss
  andre
Titel: Antw:kurze Frage zu regex
Beitrag von: franky08 am 04 Januar 2016, 23:49:12
Hallo Andre, jetzt hast du mich kurz vor dem Bett erwischt  :)

my $batt = ReadingsVal("ActionDetector","state","undef");
my @daten = split(/[0-9]/,$batt);

my $alive = $daten[0];
#my $dead = $daten[];
#my $unkn = $daten[];
#my $off = $daten[];

fhem "setreading Batt_Level alive $alive";

Im state steht: state alive:43 dead:0 unkn:0 off:0
VG
Frank
Titel: Antw:kurze Frage zu regex
Beitrag von: justme1968 am 05 Januar 2016, 00:08:38
wenn du an den zahlen splittest werden sie ja entfernt und der rest wandert in das array. da ist genau das gegenteil von dem was du willst.

du kannst an /[: ]/ (doppelpunkt und leerzeichen) splitten und jedes zweite element verwenden. dann hat du auch noch die beschreibungen in den geraden Indizes.

vielleicht geht aus splitten an [^\d]. also splitten an allem was nicht zahl ist. da sollten auch die zahlen in deinem array übrig bleiben.

oder du nimmst etwas in der art: $batt =~ m/(\d*)[^\d]*(\d*)[^\d]*(\d*)[^\d]*(\d*)/ und hast dann die zahlen in $1-$4

ich denke die erste variante ist am besten.

gruss
  andre
Titel: Antw:kurze Frage zu regex
Beitrag von: franky08 am 05 Januar 2016, 10:45:48
Danke Andre, mit
my @daten = split(/[^\d]./,$batt);

habe ich das erwünschte Ergebnis!

Vielen Dank
Frank