seth: Regular Expression

Beitrag lesen

gudn tach!

Wie bekomme ich es hin, dass der zweite Wert der dezimalen Angabe (also hinter dem Komma) in einem eigenen Match auftritt, wenn er vorhanden ist.

Also bei "decimal(10,2)" sollten die 10 und die 2 jeweils in einem eigenen match auftreten

preg_match("#^($type){1}(({1}([^)]+)){1})*(\s(unsigned){1})*#i",
   $metasum, $matches);

{1} ist an allen stellen ueberfluessig.

* = {0,} du meinst aber wahrscheinlich eher {0,1} und das ist einfach das "?".

bei deinen nicht-benoetigten geklammerten teilausdruecken, kannst du das speichern (als $1, $2, ...) unterdruecken, indem du der oeffnenden klammer ?: nachstellst, also statt (foo) (?:foo).

vorschlag:
preg_match("#^($type)(?:\((?:(\d+)|(\d+),(\d+)|('.*'))\))?(?:\s(unsigned))?$#i", $metasum, $matches);

in $matches steht dann (falls gefunden)
 [0] => alles gematchte
 [1] => der typ ($type)
 [2] => eine zahl, wenn sie der einzige parameter ist
 [3] => eine zahl, wenn sie der erste von zwei parametern ist
 [4] => eine zahl, wenn sie der zweite von zwei parametern ist
 [5] => string-parameter (alle zusammen als ein string)
 [6] => "unsigned"

prost
seth