Thread Regex für Timestamp matcht nicht so wie gewünscht (25 answers)
Opened by GwenDragon at 2024-02-01 12:07

hlubenow
 2024-02-01 16:56
#195810 #195810
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
Linuxer gibt mal wieder hochwertige Antworten. Da mag man kaum etwas hinzufügen.

Komplexe RegExs sind mir oft zu viel (sog. "Zahnstocherkrankheit": Zu viele "/\\\///"). Ich komme besser klar, wenn ich mehrere einfachere RegEx daraus mache. Hier also meine (vielleicht etwas amateurhafte) Idee:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/perl

use warnings;
use strict;

sub lstrip {
    my ($s, $a) = @_;
    my $alen = length($a);
    if ($alen >= length($s)) {
        return "";
    }
    return substr($s, $alen);
}

sub matched {
    my $s = shift;
    my %h = ();
    if ($s =~ /(^\D)/) {
        $h{prefix} = $1;
        $s = lstrip($s, $h{prefix});
    }
    if ($s =~ /(^\d+)/) {
        $h{firstnums} = $1;
        $s = lstrip($s, $h{firstnums});
    }
    if ($s =~ /(^\.\d+)/) {
        $h{pointandnums} = $1;
        $s = lstrip($s, $h{pointandnums});
    }
    if ($s eq "") {
        return 1;
    } else {
        return 0;
    }
}
    
my @b = qw(+12345.777 !1234 +123A1234.11 !12X1234.987);
my $i;
for $i (@b) {
    print "$i\t" . matched($i) . "\n";
}

View full thread Regex für Timestamp matcht nicht so wie gewünscht