使用正则表达式删除空参数

时间:2018-08-27 13:53:10

标签: php regex parsing url parameters

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

示例:

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

结果将是:

currency=USD&service_id=082ca04e53fa0f0a53f283cf7e62cd

谢谢!

3 个答案:

答案 0 :(得分:1)

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

$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

答案 1 :(得分:0)

$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中所有元素的数组。通过正则表达式,我检查“ =”符号后是否有任何值。如果存在,则将数据推送到一个新数组,然后在最后一步中将其内爆后转换为字符串。

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

答案 2 :(得分:0)

    $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