用逗号分隔的字符串和php中的等号以及转义

时间:2013-03-22 12:22:35

标签: php regex pcre

我想分割一个这样的字符串:

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*/

请解释我做错了什么?

2 个答案:

答案 0 :(得分:6)

你需要负面的后视assertions

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

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

print_r($res);

基本上它匹配一个逗号(或等号)后面跟一个可选的空格字符序列但是如果前面没有反斜杠那么。

答案 1 :(得分:1)

不是很优雅,但这应该可以通过preg_split

来实现
/(\s*=\s*)|(\s*,\s*)|(\s*\\=\s*)|(\s*\\,\s*)/g

最重要的是,不要忘记最后的g用于全局匹配。