2010-04-01 73 views
-1

看到这个字符串: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"; 

回答

3
$string = preg_replace('/&?fieldB=[0-9]+/', '', $string); 
+0

@Chad Birch,是不是'\ d'比'[0-9]'更快? – 2010-04-01 19:36:40

+0

它可能会或者可能会变慢,具体取决于它的处理方式。无论哪种方式,这是我在“不是单引号比双引号更快?”级别上看到的那种优化?这并不值得担心,我只是觉得'[0-9]'更容易阅读。 – 2010-04-01 19:49:48

+0

如果fieldB是第一个参数,则这将失败。 – MadCoder 2010-04-02 02:05:30

0
$string = preg_replce('/fieldB=([0-9]+)/', '', $string); 
+0

错字,删除:) – bigstylee 2010-04-01 19:26:04

+1

这会在URL中留下额外的&。 – 2010-04-01 19:30:14

1

试试这个:

$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 
+0

@zombat,这看起来非常类似于在你之前明确发布的答案。 – 2010-04-01 19:26:01

+0

当我发布我的帖子时,线程中的其他人都包含不正确的代码。 – zombat 2010-04-01 19:38:13

1

随着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是不是一个标准的扩展,所以你必须安装它。