看到這個字符串: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