【问题标题】:Remove empty parameters using regex [duplicate]使用正则表达式删除空参数[重复]
【发布时间】:2019-02-02 02:06:11
【问题描述】:

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

例子:

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

结果是:

currency=USD&service_id=082ca04e53fa0f0a53f283cf7e62cd

提前致谢!

【问题讨论】:

标签: php regex parsing url parameters


【解决方案1】:
$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

【讨论】:

  • 谢谢!工作完美,解释清楚;)
【解决方案2】:

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

$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

【讨论】:

    【解决方案3】:
        $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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2016-10-15
      • 2015-12-17
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      相关资源
      最近更新 更多