我需要PHP正则表达式的帮助。我有一个包含大量数据的字符串,格式可以像这样:
key=value,e4354ahj',=awet3,asdfa'=asdfa=23f23
所以我有两个分隔符,其中=是键和值的集合。问题是key和value可以包含相同的符号和=,但它们总是会被转义。所以我不能用explosion。我需要使用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
)
解释:
-
(.*?)(?<!'''')=
:匹配任何东西并将其分组直到=
之前没有'
-
(.*?)(?:(?<!''''),|$)
:匹配任何内容并将其分组到,
之前没有'
或行尾。