2013-08-26 25 views
5

Ho blocchi di testo libero che contengono numeri di telefono e più numeri di 6 cifre che ho bisogno di catturare. Il numero a 6 cifre ha un ',' opzionale.stringa di corrispondenza regolare di esattamente 6 numeri nel testo che ha anche numeri di telefono

esempi di numeri a 6 cifre potrebbero essere 123456, o 123.456, ma ho bisogno di differenziarsi da un numero di telefono come 1 234 456 8901

ho:

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

Esiste un modo migliore per fare questo?

+2

Domande regex con attenzione su stackoverflow. Downgoting automatico da regex troll. Vedo che qualcuno ti ha già dato un downvote. Ma la tua domanda è completamente valida. –

+1

meglio? c'è un problema con quello che hai? –

+1

Puoi dare un esempio di "numero a 6 cifre multiple"? O qual è il formato per un numero di telefono nella tua locale? – jerdiggity

risposta

2

È un po 'difficile da rivedere l'espressione regolare senza l'input di esempio, ma paio di osservazioni:

  • [0-9] possono essere sostituiti con \d (dal momento che, si sta già utilizzando alla fine)

  • [\D] corrisponde esattamente a \D. È una classe di caratteri in sé e a meno che tu non abbia alcuni caratteri in più per includerla bene senza essere inclusa in [].

  • (?:,) dovrebbe essere semplicemente , perché non desidera catturare esso, né ha qualsiasi Quantificatori.

  • ,\[\W_] Qui sembra che si desideri utilizzare la classe di caratteri ma lo \ sfuggirebbe al primo [. Se hai effettivamente bisogno di un letterale \ lì; devi fuggire come \\ dato che è un personaggio speciale.

+0

grazie per i suggerimenti – user61629

Problemi correlati