2013-03-22 1 views
6

Я хочу, чтобы разбить строку, как это:разбить строку разделенных запятыми и знаком равенства в PHP вытекания

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

С регулярным выражением, так что результат должен быть

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

Я был пытаясь в течение нескольких часов, но не удалось с некрасивыми конструкций, как это (для preg_match_all):

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

и это (для preg_split)

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

Пожалуйста, explayne, что я делаю неправильно?

ответ

6

Вы должны негативно assertions назад ':

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

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

print_r($res); 

В основном это соответствует запятой (или знак равенства), а затем необязательной последовательность символов пробела, но только если нет обратного косых черт предшествующихов.

+0

Большое вам спасибо! Вы сделали мой день :) * читает о утверждениях * – Andrienko

1

Не очень элегантно, но это должно сделать трюк с preg_split

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

Самое главное, не забывайте о г в конце глобального согласования.

+0

Модификатор g не существует в pcre, вы смешивали его с JavaScript-регулярным выражением? :) –