2010-04-01 71 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是不是一個標準的擴展,所以你必須安裝它。