2013-03-22 15 views
6

voglio dividere una stringa come questa:stringa di spaccatura separati da virgola e segno di uguale in PHP con fuga

colors = blue, green, yellow, kinda violet\, not sure,purple\=almost magenta 

Con un'espressione regolare in modo che il risultato dovrebbe essere

colors 
blue 
green 
yellow 
kinda violet\, not sure 
purple\=almost magenta 

Sono stato provare per ore, ma non è riuscito con brutte costruzioni come questo (per preg_match_all):

/(.*)\s*[=]\s*((.+)\s*,\s*)*/ 

e questo (per preg_split)

/\s*[=,^(\\,)^(\\=)]\s*/ 

Per favore, esplayne cosa sto sbagliando?

risposta

6

Si avrebbe bisogno lookbehind negativo assertions:

$s = 'colors = blue, green, yellow, kinda violet\, not sure,purple\=almost magenta'; 

$res = preg_split('/(?<!\\\\)[,=]\s*/', $s); 

print_r($res); 

In sostanza si corrisponde una virgola (o segno di uguale) seguito da una sequenza opzionale di caratteri di spazio, ma solo se non c'è backslash che lo precede.

+0

Grazie mille! Hai fatto la mia giornata :) * si legge sulle asserzioni * – Andrienko

1

Non molto elegante, ma questo dovrebbe fare il trucco con preg_split

/(\s*=\s*)|(\s*,\s*)|(\s*\\=\s*)|(\s*\\,\s*)/g 

Soprattutto, non dimenticate il g alla fine per la corrispondenza globale.

+0

Il modificatore g non esiste in pcre, lo stavi mescolando con regex JavaScript? :) –

Problemi correlati