2011-11-11 5 views
6

Sto cercando di sostituire tutti i numeri standalone da una stringa in cui il numero non ha caratteri adiacenti (compresi i trattini), ad esempio:preg_replace per rimuovere i numeri standalone

Test 3 stringa 49Test 49test9 9

Dovrebbe restituire stringa di prova 49Test 49Test9

Finora ho giocato in giro con:

$str = 'Test 3 string 49Test 49test9 9'; 
    $str= preg_replace('/[^a-z\-]+(\d+)[^a-z\-]+?/isU', ' ', $str); 
    echo $str; 

Tuttavia senza fortuna, questo restituisce

stringa di prova 9Test 9test9

lasciando fuori parte della stringa, ho pensato di aggiungere [0-9] per le partite, ma senza alcun risultato , cosa mi manca, sembra così semplice?

Grazie in anticipo

+0

Si desidera sostituire i numeri con un carattere a spazio singolo (come nel proprio esempio) o semplicemente rimuoverli? – Phil

risposta

7

provare a utilizzare un confine di parola e negativi look-around per trattini, ad esempio

$str = preg_replace('/\b(?<!-)\d+(?!-)\b/', '', $str); 
+0

Funziona eccetto che ho bisogno di consentire anche il 2-test, scusate se non sono stato chiaro su questo :-) – user1041334

+1

Bello, non sapevo di \ b. Grazie per le informazioni! –

+0

@ user1041334 Ho aggiunto una possibile soluzione al problema di trattino utilizzando gli aspetti negativi. Vedi se funziona – Phil

0

Io suggerirei di usare explode(" ",$str) per ottenere un array delle "parole" nella vostra stringa. Quindi dovrebbe essere più facile filtrare i singoli numeri.

1

Non che complicato, se si guarda gli spazi :)

<?php 
$str = 'Test 3 string 49Test 49test9 9'; 
$str = preg_replace('/(\s(\d+)\s|\s(\d+)$|^(\d+)\s)/iU', '', $str); 
echo $str; 
+0

Grazie, funziona come un fascino! – user1041334

+0

In realtà; Sono [email protected] La risposta di Phil è probabilmente una soluzione migliore della mia. Non sapevo ancora di \ b ancora. Lo so. StackOverflow è cool. –

1

Prova questo, ho cercato di coprire il vostro fabbisogno supplementare di non corrispondere il 5-abc

\s*(?<!\B|-)\d+(?!\B|-)\s* 

e sostituirli con un unico spazio!

Guardalo here online on Regexr

Il problema è quindi di estendere il limite di parola con il carattere -. Ho raggiunto questo utilizzando around aspetto negativo e alla ricerca di - o \B (non una parola di confine)

Inoltre sto corrispondenti alla spazi che lo circondano con la \s*, quindi, si deve sostituire con un singolo spazio.

+0

Bel lavoro riducendo gli spazi – Phil