Thread Regex für Timestamp matcht nicht so wie gewünscht
(25 answers)
Opened by GwenDragon at 2024-02-01 12:07
Ich hadere gerade mit einem Regex. Und habe das Buch "Mastering Regular Expressions" von Jerry Friedl nicht zur Verfügung zum Spicken. ;-) Außerdem hätte ich gern von euch erklärt, wo mein Denkfehler beim Interpretieren der PCRE-Maschine liegt.
Es soll folgende Beispiele matchen: +12345.777 !1234 aber nicht +123A1234.11 !12X1234.987 Als Prüfung, ob der Timestamp aus CORE::time oder einer von Time::HiRes::time ist. Warum fängt das Regex /^(\D)?(\d+(\.\d+)?)/ nur einen Teil? Ich will ja $1 und $2 haben, also aus der ersten und zweiten umschließenden Klammer. Ich versteh das Regex so Code: (dl
)
1 ^ # Zeilenanfang Verwende ich /^(\D)?(\d+(\.\d+)?)$/ passt es. Warum nur, wenn das Zeilenende mit im Regex ist? Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/usr/bin/perl use strict; use warnings; use 5.024; while (my $id = <DATA>) { if ($id =~ /^(\D)?(\d+(\.\d+)?)/ ) { # neues Format, falls Timestamp aus Time::HiRes my ( $flag, $i ) = ($1, $2); say "$flag|$i" ; } } __DATA__ IDS follow now: +1123311.11 !1A23311 -1A23311-11 -123311.2211 !123311A !123311 __END__ Ergibt: +|1123311.11 !|1 -|1 -|123311.2211 !|123311 !|123311 Last edited: 2024-02-01 12:18:16 +0100 (CET) |