2013-08-26 25 views
5

Ich habe Blöcke von Freitext, die Telefonnummern und mehrere 6-stellige Zahlen enthalten, die ich erfassen muss. Die 6-stellige Nummer hat ein optionales ','.Regex Match String von genau 6 Nummern in Text, der auch Telefonnummern hat

Beispiele für die 6-stellige Zahlen könnten 123.456 oder 123.456 sein, aber ich brauche von einer Telefonnummer wie 1 234 456 8901

Ich muss unterscheiden:

preg_match_all(",\[\W_][0-9]{3}(?:,)[0-9]{3}[\W_][\D]\d",$html, $value); 

Gibt es eine bessere Art und Weise um dies zu tun?

+2

Vorsichtig Fragen Regex Fragen auf Stackoverflow. Automatisches Downvoting durch die Regex-Trolle. Ich sehe, jemand hat dir schon einen Downvote gegeben. Aber deine Frage ist vollständig gültig. –

+1

besser? Gibt es ein Problem mit dem, was Sie haben? –

+1

Können Sie ein Beispiel für eine "mehrfache 6-stellige Zahl" geben? Oder wie lautet das Format für eine Telefonnummer in Ihrem Gebietsschema? – jerdiggity

Antwort

2

Es ist ein bisschen schwierig, die Regex ohne Abtastwerteingang aber einige Beobachtungen zu überprüfen:

  • [0-9] mit \d ersetzt werden (da, bist du schon am Ende mit)

  • [\D] ist genau das gleiche wie \D. Es ist eine Zeichenklasse selbst und es sei denn, Sie haben noch mehr Zeichen, um es einzuschließen, ohne in [] eingeschlossen zu sein.

  • (?:,) sollte einfach , sein, weil Sie weder sie aufnehmen möchten noch ob sie für eine Quantoren.

  • ,\[\W_] Hier scheint es, Sie möchten die Zeichenklasse verwenden, aber die \ würde die erste [ entkommen. Wenn Sie tatsächlich ein Literal \ dort benötigen; Sie müssen es als \\ entkommen, da es ein Sonderzeichen ist.

+0

übersichtlicher für die Tipps zu machen – user61629