SorgenKindMech: / RegEx Telefonnummern

Beitrag lesen

Huhu liebes Forum,

ich bin gerade dabei eine kleine funktion zu basteln, die aus verschiedenen texten rufnummern filern und ersetzen soll

ich hab da mal ein anfang gemacht und mich mit regex rumgeschlagen ... holla die waldfee ... wer es kann liebt es bestimmt, aber ich hasse es ;)

ich bin mir durchaus bewusst, dass ich mit meinem regex vielleicht mehr treffe als ich will, aber das ist nicht schlimm, ein bisschen schwund ist immer *g*

aufbau wie folgt:

Ländervorwahl (Unterstrich=Leerzeichen):
[+][0-9]{2,4}[ |/|.|-]? +49_
|00[0-9]{2,4}[ |/|.|-]? 0049_
|0 0
|(0 (0
Ortsvorwahl:
[1-9][0-9]{1,4}[)]?[ |/|.|-]? 123 (nicht mit 0 beginnend) vielleicht eine schließende klammer und vielleicht noch ein trennzeichen
restliche rufnummer:
[- 0-9]+ beliebig viele zahlen, auch leerzeichen und bindestriche dürfen enthalten sein

daraus ergibt sich folgender beispielhafter regex:

preg_match_all("~([+][0-9]{2,4}[ |/|\.|\-]?|00[0-9]{2,4}[ |/|\.|\-]?|0|\(0)([0-9]{2,5}[\)]?[ |/|\.|\-]?)([\- 0-9]+)~m",$notiz['msg'],$telefonnummern);

soweit funktioniert er ja ganz gut, es seien folgende teststrings gegeben:

0123 456 78 9
0123-456 78 9
0123/456789
+49 123 45 67 89 asdasd
0049 123 456789
0049/123/456789
(030) 123 456
0049 (030) 123 45678

alle funktionieren super, aber ausgerechnet der letze geht total in die hose
soweit ich gelesen habe wird der ausdruck von links nach rechts interpretiert, jedoch nimmt er mit die zweite (!) 0, dann das 49 und dann das leerzeichen als einzelnes .... warum? im ersten teilausdruck trifft doch das zweite pattern (heißt das so?) voll zu

kann mir das jemand erklären?

btw: für optimierungsvorschläge die NICHT die übersichtlichkeit für anfänger flöten lassen gehen bin ich auch dankbar ;)