我需要PHP中正则表达式的帮助。 我有一个字符串包含大量的数据,格式可能是这样的。PHP需要的正则表达式preg_split
key=value,e4354ahj\,=awet3,asdfa\=asdfa=23f23
所以我有2个分隔符,和=其中,是一组键和值。事情是,键和值可以包含相同的符号,和=但他们将永远逃脱。所以我不能使用爆炸。我需要使用preg_split,但我不擅长正则表达式。
有人能帮我一个这个吗?
我需要PHP中正则表达式的帮助。 我有一个字符串包含大量的数据,格式可能是这样的。PHP需要的正则表达式preg_split
key=value,e4354ahj\,=awet3,asdfa\=asdfa=23f23
所以我有2个分隔符,和=其中,是一组键和值。事情是,键和值可以包含相同的符号,和=但他们将永远逃脱。所以我不能使用爆炸。我需要使用preg_split,但我不擅长正则表达式。
有人能帮我一个这个吗?
您需要使用negative lookbehind:
// 4 backslashes because they are in a PHP string, so PHP translates them to \\
// and then the regex engine translates the \\ to a literal \
$keyValuePairs = preg_split('/(?<!\\\\),/', $input);
这会分裂每个,
未逃脱,让你获得键值对。您可以为每一对来分隔键和值做同样的:
list($key, $value) = preg_split('/(?<!\\\\)=/', $pair);
@ Jon的回答非常棒。不过,我觉得通过字符串匹配型提供了一个解决方案:
preg_match_all('#(.*?)(?<!\\\\)=(.*?)(?:(?<!\\\\),|$)#', $string, $m);
// You'll find the keys in $m[1] and the values in $m[2]
$array = array_combine($m[1], $m[2]);
print_r($array);
输出:
Array
(
[key] => value
[e4354ahj\,] => awet3
[asdfa\=asdfa] => 23f23
)
说明:
(.*?)(?<!\\\\)=
匹配任何条件和组,直到=
不前通过\
(.*?)(?:(?<!\\\\),|$)
:匹配任何内容并将其分组,直到,
之前没有\
或行尾。
伟大的答案乔恩。奇迹般有效。谢谢 –