看到这个字符串:PHP的preg_replace URL字段
$string = "http://www.url.com/?fieldA=123&fieldB=456&fieldC=789";
假设"fieldB"
总是有着积极的非十进制数值(但不一定是三位数),什么preg_replace
命令,我需要彻底删除,这样的该字符串将读取:
$string = "http://www.url.com/?fieldA=123&fieldC=789";
看到这个字符串:PHP的preg_replace URL字段
$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 = preg_replce('/fieldB=([0-9]+)/', '', $string);
错字,删除:) – bigstylee 2010-04-01 19:26:04
这会在URL中留下额外的&。 – 2010-04-01 19:30:14
试试这个:
$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
@zombat,这看起来非常类似于在你之前明确发布的答案。 – 2010-04-01 19:26:01
当我发布我的帖子时,线程中的其他人都包含不正确的代码。 – zombat 2010-04-01 19:38:13
随着preg_replace()
:
$url = preg_replace('!&?fieldB=\d+!', '', $string);
您应该删除收到&
为好。另外,请勿使用[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);
注:不幸的是,HTTP extension是不是一个标准的扩展,所以你必须安装它。
@Chad Birch,是不是'\ d'比'[0-9]'更快? – 2010-04-01 19:36:40
它可能会或者可能会变慢,具体取决于它的处理方式。无论哪种方式,这是我在“不是单引号比双引号更快?”级别上看到的那种优化?这并不值得担心,我只是觉得'[0-9]'更容易阅读。 – 2010-04-01 19:49:48
如果fieldB是第一个参数,则这将失败。 – MadCoder 2010-04-02 02:05:30