通过regexp删除不需要的字符串部分

时间:2016-04-20 13:39:40

标签: php regex preg-replace

我有一个看起来像这样的字符串:

position=&region_id=&radius=&companytype=&employment=&scope=&salary_from=&salary_to=&pe

是否可以preg_replace以上字符串的所有不需要的部分,除了" radius ="和"范围=" ?

P.S。字符串中的所有查询参数可以以随机方式跟随。

2 个答案:

答案 0 :(得分:2)

以下是满足您需求的有效解决方案:

<?php

$str = "position=&region_id=&radius=&companytype=&employment=&scope=&salary_from=&salary_to=&pe";

// parse the string
parse_str($str,$output);

// unset the unwanted keys
unset($output['position']);
unset($output['region_id']);
unset($output['companytype']);
unset($output['employment']);
unset($output['salary_from']);
unset($output['salary_to']);
unset($output['pe']);

// transform the result to a query string again
$strClean = http_build_query($output);

echo $strClean;

?>

答案 1 :(得分:0)

如果您使用要保留为键的参数定义数组,则可以在array_intersect_key之后使用parse_str来仅获取这些参数,而无需显式删除所有不需要的参数。

$wanted_keys = array('radius' => 0, 'scope' => 0);  // the values are irrelevant
parse_str($str, $parsed);
$filtered = array_intersect_key($parsed, $wanted_keys);
$result = http_build_query($filtered);

如果要将所需的键定义为值,可以使用array_flip将它们转换为键。

function filterQuery($query, $wanted_keys) {
    $wanted_keys = array_flip($wanted_keys);
    parse_str($query, $parsed);
    return http_build_query(array_intersect_key($parsed, $wanted_keys));
}

$result = filterQuery($str, array('radius', 'scope'));