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

hallo liebe leute!

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

nun möchte ich zur weitere nverwertung die nummernblöcke aufsplitten.
dazu verwende ich folgendes:
preg_match('/(\d+)-(\d+)-(\d+)/', $telefon, $match);
$tland = $match[1];
$tvw = $match[2];
$tnr = $match[3];

leider schneidet mir mein skript die letzten stellen (durchwahlen) ab.
auch wenn ich als trennzeichen / oder | nehme, wird abgesachnitten.

hab auch schon folgendes - leider erfolglos - versucht:
preg_match('/(\d+)/(\d+)/(\d+)/', $telefon, $match);
$tland = $match[1];
$tvw = $match[2];
if ($match[4] != ""){$tnr = $match[3].'-'.$match[4];}
else {$tnr = $match[3];}

kann mir jemand helfen? ich verstehs nicht...

danke,
eure theresa!

  1. Hi theresa!

    kann mir jemand helfen? ich verstehs nicht...

    Alles, was du brauchst, ist explode.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Alles, was du brauchst, ist explode.

      DANKEEEEEEEEEEE!!!!!
      Funktioniert toll.

      MfG H☼psel

      gute nacht,
      theresa

  2. 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.