MudGuard: preg_match() - versteh ich nicht...

Beitrag lesen

Hi,

hab in einer datenbank telefonnummern und zwar in folgendem format:
+49-12345-1234-12323
oder
+49-12345-1234

Du hast also 3 oder 4 Zifferngruppen.

preg_match('/(\d+)-(\d+)-(\d+)/', $telefon, $match);

Der Ausdruck matcht 3 Zifferngruppen.

leider schneidet mir mein skript die letzten stellen (durchwahlen) ab.

Das wäre die 4. Zifferngruppe.

auch wenn ich als trennzeichen / oder | nehme, wird abgesachnitten.

Das Trennzeichen ändert nichts an der Anzahl der Zifferngruppen.

preg_match('/(\d+)/(\d+)/(\d+)/', $telefon, $match);

Auch dieser Ausdruck matcht exakt 3 Zifferngruppen.

$tland = $match[1];
$tvw = $match[2];
if ($match[4] != ""){$tnr = $match[3].'-'.$match[4];}

Auf die 4. Klammerung zuzugreifen zu versuchen ist sinnlos, da der Ausdruck ja nur 3 Klammern hat, also kann die 4. niemals existieren.

kann mir jemand helfen? ich verstehs nicht...

Du müßtest noch eine optionale 4. Zifferngruppe anhängen, also z.B.

/(\d+)-(\d+)-(\d+)(?:-(\d+))?/

(?:) ist dabei eine Gruppierung, die nicht gespeichert wird.
? steht für 0 oder 1mal.
Also ist (?:)? eine optionale Gruppe (kann 1mal vorhanden sein, muß aber nicht).
Der Inhalt von (?:) ist die bereits bekannte Anordnung Trennzeichen plus Zifferngruppe.

Aber Hopsel hat Recht, explode ist hier sinnvoller.

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter
O o ostern ...
Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.