prüfen eines Skalars auf numerischen Inhalt

Versuche gerade ein Problem zu lösen, indem ich einen Skalar daraufhin prüfen möchte, ob er einen nur numerischen Inhalt hat. Das Ganze versuche ich möglichst geschickt zu lösen, komme aber einfach nicht mit den regulären Ausdrücken dahingehend zurecht:

Ansatz 1:

my $tmp = $Skalar;
$tmp =~ s/\d/ /g;
if (length $tmp != 0) ...

Ansatz 2:

if ($Skalar !~ /\d{ (length $Skalar) }/) ...

Ich denke mal, dass ich es mir wieder viel zu kompliziert mache …
also Ansatz 1 dürfte wohl nicht wirklich das gelbe vom Ei sein, aber es funzt!
Ansatz 2 sollte mal so gemeint sein, das ich nach einer Zahl suche die genau „der länge des Skalar“ mal vorkommt … aber die length-Funktion innerhalb das Quantifiers funktioniert nicht wirklich …

Kann mir da mal jemand helfen?

Gruß,
Martin

Hallo Martin,

es kommt drauf an, was du willst. Ich gehe mal davon aus, dass du nur Integerwerte (kein Dezimalkomma, keine Nachkommastellen etc.) betrachtest.

Der ziemlich einfachste RE ware dann:

$string =~ /^ # Anfang des Strings
[±]? # optionales Vorzeichen
\d+ # mindestens eine Dezimalziffer
$ # Stringende
/xo # extended Styntx (Kommentare im RE)

Wenn der String auch noch mit Leerzeichen gespickt sein darf, kannst du ggf. das ‚\d+‘ durch \s*\d(?:\d|\s)* (optionales Space, min. eine Ziffer, danach beliebige ANzahl von Ziffern oder Spaces) ersetzen…

Es gibt wie immer noch viele weitere Möglichkeiten, die hier sollte aber schon reichen.

Gruß
Bernhard

Hi,

danke für Deine Antwort. Das funktioniert alles bestens.
Nur könntest Du mir mal das „xo“ erklären? Ich finde dazu keine Hilfe in meinem Perl-Buch. Wozu braucht man das? Oder was bewirkt es?

Gruß,
Martin

Hi,

/x -> ‚erweiterte Syntax‘ benutzen, Leerzeichen werden ignoriert und alles ab # bis zum Zeilenende gilt als Kommentar - benutzt man gerne, um auf den ersten Blick unverständliche REs zu kommentieren (damit man auch nach 2 Wochen noch kapiert, was man da eigentlich produziert hat)

/o -> RE wird nur beim ersten Aufruf kompiliert (da dieser RE sich zur Laufzeit nicht mehr ändert, kann man durch diesen ‚Trick‘ bei häufiger Verwendung einige Millisekunden an Laufzeit einsparen…)

bbr

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Jau danke!

Hab erst spät geantwortet, weil ich gerade mit meinem Rechner umgezogen bin :smile:
Danke für die Antwort!

Gruß,
Martin