6

我想拆分这样的字符串:

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

请解释一下我做错了什么?

4

2 回答 2

6

您将需要否定的后向断言

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

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

print_r($res);

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

于 2013-03-22T12:27:54.990 回答
1

不是很优雅,但这应该可以使用 preg_split

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

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

于 2013-03-22T12:48:47.630 回答