我需要 PHP preg_match
的正则表达式来处理如下内容:
variable1=true&variable2=1,2,3&variable3="test"&variable4!=true&variable5!=4,5,6&variable!="test"
我会更改为类似 json 的东西,但这不支持我需要的向后兼容性,任何建议,我得到的最接近的是:
/(('w+)(=|!=)("'w+"|true|false|'d+)*)/
这是部分成功的,任何帮助都会很棒。
使用字符串函数
$string = 'variable1=true&variable2=1,2,3&variable3="test"&variable4!=true&variable5!=4,5,6&variable!="test"';
$pairs = explode('&', $string);
foreach ($pairs as $pair) {
if (strstr($pair, '!=')) {
list($key, $value) = explode('!=', $pair);
} else {
list($key, $value) = explode('=', $pair);
}
$values[$key] = $value;
}
在代码板上查看输出
此代码首先使用 &
将字符串拆分为键值对。之后,它遍历每对并尝试再次拆分它,首先使用 !=
,如果失败,则使用 =
.
使用正则表达式
preg_match_all('/(('w+)(=|!=)("'w+"|true|false|['d',]+)*)/', $string, $matches);
我在'd
周围添加了括号[...]
,并在',
中添加了转义逗号。
实际上有一个内置函数 parse_str
,正是为此目的。这里不需要正则表达式。