我想分割一个这样的字符串:
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*/
请解释我做错了什么?
答案 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用于全局匹配。