使用正则表达式删除空参数[复制]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用正则表达式删除空参数[复制]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

可能是一个简单的解决方案,但我是初学者。我试图使用正则表达式从下面的字符串中删除空参数。

例:

amount=&country_code=&currency=USD&price=&product_name=&service_id=082ca04e53fa0f0a53f283cf7e62cd&profile=&id=

结果将是:

currency=USD&service_id=082ca04e53fa0f0a53f283cf7e62cd

提前致谢!

答案
$data="amount=&country_code=&currency=USD&price=&product_name=&service_id=082ca04e53fa0f0a53f283cf7e62cd&profile=&id=";

$data=explode('&',$data);


foreach($data as $row){
    if(substr($row, strpos($row, "=") + 1)){
        $filteredArray[]=$row;
    }
}

$data=implode('&',$filteredArray);

echo $data;

这将仅使用过滤后的元素创建一个新数组。在第一步,创建url中所有元素的数组。通过正则表达式我检查'='符号后面是否有任何值。如果有我将数据推送到一个新的数组,我在最后一步中使用implode转换为字符串。

输出是:currency=USD&service_id=082ca04e53fa0f0a53f283cf7e62cd

另一答案

我设法提出了以下基于正则表达式的解决方案。正则表达式由一个交替组成,这是处理可能第一个和/或最后一个查询项为空的边缘情况所必需的。

$input = "amount=&country_code=&currency=USD&price=&product_name=&service_id=082ca04e53fa0f0a53f283cf7e62cd&profile=&id=";
$input = preg_replace("/(?<=&|^)[^=]+=(?:&|$)|(?:&|^)[^=]+=(?=&|$)/", "", $input);
echo $input;

currency=USD&service_id=082ca04e53fa0f0a53f283cf7e62cd

Demo

另一答案
    $url = 'https://stackoverflow.com/questions?amount=&country_code=&currency=USD&price=&product_name=&service_id=082ca04e53fa0f0a53f283cf7e62cd&profile=&id=';
    parse_str(parse_url($url, php_URL_QUERY), $out); // not empty key-value result as array
    $link = null;
    foreach ($out as $key => $value) {
        if (!empty($value)) {
            $link .= "$key=$value&";
        }
    }
    $link = rtrim($link, '&'); // not empty key-value result as string

以上是关于使用正则表达式删除空参数[复制]的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询的正则表达式给出了一个空的 MatchCollection

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

为re.sub替换参数转义Python正则表达式字符串? [复制]

正则表达式在代码中查找空注释

如何删除所有行包括Notepad ++中的正则表达式的'collect_host_stats'[复制]

从查询字符串中删除一个参数的正则表达式