Preg_match包含键值模式的字符串

时间:2012-06-19 12:05:21

标签: php regex preg-match preg-match-all

我需要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+)*)/

哪个部分成功,任何帮助都会很棒。

2 个答案:

答案 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;
}

View the output on codepad

此代码首先使用&拆分字符串,因此转换为键值对。 之后,它会循环遍历每一对并尝试再次拆分,首先使用!=,如果失败,则使用=


使用正则表达式

preg_match_all('/((\w+)(=|!=)("\w+"|true|false|[\d\,]+)*)/', $string, $matches);

我在[...]周围添加了括号\d和一个转义的逗号\,

答案 1 :(得分:3)

实际上有一个内置函数parse_str,正是出于此目的。 这里没有正则表达式。