我需要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+)*)/
哪个部分成功,任何帮助都会很棒。
答案 0 :(得分:3)
$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
和一个转义的逗号\,
。
答案 1 :(得分:3)
实际上有一个内置函数parse_str
,正是出于此目的。
这里没有正则表达式。