正则表达式,用于从字符串 (PHP) 中删除 ID=1234


regular expression to remove ID=1234 from a string (PHP)

我正在尝试创建一个正则表达式来执行以下操作(在preg_replace内)

$str = 'http://www.site.com&ID=1620';
$str = 'http://www.site.com';

我将如何编写一个preg_replace来简单地从字符串中删除 &ID=1620(考虑到 ID 可能是可变字符串长度

提前致谢

你可以使用...

$str = preg_replace('/[?&;]ID='d+/', '', $str);

我假设这是一个普通的URL,因此[?&;].如果是这样的话,&应该是?

如果它是更大的GET参数列表的一部分,你可能最好使用...

parse_str($str, $params);
unset($params['ID']);
$str = http_build_query($params);

我猜&不允许作为ID属性中的字符。在这种情况下,您可以使用

$result = preg_replace('/&ID=[^&]+/', '', $subject);

或者(可能更好,感谢保罗·

$result = preg_replace('/[?&]ID=[^&]+/', '', $subject);

这将删除&ID=(第二个版本也将删除?ID=)以及直到下一个&或字符串末尾之前的任何数量的字符。此方法可确保保留以下任何属性:

$str = 'http://www.site.com?spam=eggs&ID=1620&foo=bar';

将更改为

$str = 'http://www.site.com?spam=eggs&foo=bar';

你可以只使用parse_url
(也就是说,如果 URL 的格式为:http://something.com?id1=1&id2=2 ):

$url = parse_url($str);
echo "http://{$url['host]}";