Preg_match包含键值模式的字符串


Preg_match a string containing key value pattern

我需要 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 ,正是为此目的。这里不需要正则表达式。