PHP preg_替换URL字段

PHP preg_替换URL字段,php,regex,preg-replace,Php,Regex,Preg Replace,请参见此字符串: $string = "http://www.url.com/?fieldA=123&fieldB=456&fieldC=789"; 假设fieldB总是有一个正的非十进制数值,但不一定有三位数长,我需要什么preg_replace命令来完全删除它,这样字符串就会读取: $string = "http://www.url.com/?fieldA=123&fieldC=789"; 试试这个: $string = preg_replace('/&f

请参见此字符串:

$string = "http://www.url.com/?fieldA=123&fieldB=456&fieldC=789";
假设fieldB总是有一个正的非十进制数值,但不一定有三位数长,我需要什么preg_replace命令来完全删除它,这样字符串就会读取:

$string = "http://www.url.com/?fieldA=123&fieldC=789";
试试这个:

$string = preg_replace('/&fieldB=[0-9]+/', '', $string);
工作示例代码:

$string = "http://www.url.com/?fieldA=123&fieldB=456&fieldC=789";
$string = preg_replace('/&fieldB=[0-9]+/', '', $string);
echo $string;

//gives http://www.url.com/?fieldA=123&fieldC=789
使用preg_替换:

您也应该在删除之前删除(&E)。另外,不要使用[0-9]。请改用\d

也就是说,PHP有很好的本地函数来处理URL。另一种方法是:

$url = parse_url($string);
parse_str($url['query'], $query);
unset($query['fieldB']);
$url['query'] = http_build_query($query);
$string = http_build_url($url);

注意:很遗憾,不是标准的扩展,因此您必须安装它。

@zombat,这看起来与您之前发布的答案非常相似。当我发布我的答案时,线程中的其他答案都包含错误代码。这将在URL中留下一个额外的(&U)。@Chad Birch,不是\d快于[0-9]?可能是,或者它可能会慢一些,这取决于它的处理方式。不管是哪种方式,这就是我在层次上看到的优化,单引号不是比双引号快吗?这真的不值得担心,我只是觉得[0-9]更容易阅读。如果fieldB是第一个参数,这将失败。
$string = "http://www.url.com/?fieldA=123&fieldB=456&fieldC=789";
$string = preg_replace('/&fieldB=[0-9]+/', '', $string);
echo $string;

//gives http://www.url.com/?fieldA=123&fieldC=789
$url = preg_replace('!&?fieldB=\d+!', '', $string);
$url = parse_url($string);
parse_str($url['query'], $query);
unset($query['fieldB']);
$url['query'] = http_build_query($query);
$string = http_build_url($url);