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

从字符串中删除ID=1234的正则表达式(PHP),php,regex,preg-replace,Php,Regex,Preg Replace,我正在尝试创建一个正则表达式来执行以下操作(在preg_replace中) 如何编写preg_replace来简单地从字符串中删除&ID=1620(考虑到ID可以是可变的字符串长度) 提前感谢我猜&在ID属性中不允许作为字符。在这种情况下,您可以使用 $result = preg_replace('/&ID=[^&]+/', '', $subject); 或者(多亏了保罗,可能更好): 这将删除&ID=(第二个版本也将删除?ID=)加上在下一个&或字符串结尾之前的任何数量的字符

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

如何编写preg_replace来简单地从字符串中删除&ID=1620(考虑到ID可以是可变的字符串长度)


提前感谢

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

$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';
你可以用

$str = preg_replace('/[?&;]ID=\d+/', '', $str);
我假设这是一个普通的URL,因此是
[?&;]
。如果是这样的话,
&
应该是

如果它是更大的GET参数列表的一部分,那么您最好使用

parse_str($str, $params);

unset($params['ID']);

$str = http_build_query($params);
您只需使用
(即如果URL的格式为:
http://something.com?id1=1&id2=2
):


不知道这个字符串是从哪里来的,但这甚至不是一个有效的URI。我知道它不是一个有效的url-它只是系统过程的一部分(太多了)我知道这不是一个有效的URL-str_replace的另一部分从字符串中删除了?page=something等。为了让它更清晰,我可能应该在没有str_replace的情况下放置原始URL。要点是:如果它是一个有效的URI,你肯定应该使用
parse_URL()解析它
。被禁止发布?我现在该怎么办?+1 Gaz可能也想要
[?&]
而不是您的第一个
&
,以防它是查询字符串中的第一件事。只要OP不需要任何GET参数,这将很好地工作。@alex OP似乎并不需要它们,即使他需要,OP也可以使用
parse_url
返回的其他数组元素来查看它们。这不起作用。。。。如果URL是
http://www.site.com&ID=1620
但是如果url是
http://www.site.com?ID=1620
这会起作用
解析url
在使用
&
@Baba-hmm时很容易混淆。我没有看到OP使用了
&
…奇怪。我会更新我的答案。哇,伙计们-反应太好了!希望我能我从所有的帖子中学到了很多东西!谢谢
$str = preg_replace('/[?&;]ID=\d+/', '', $str);
parse_str($str, $params);

unset($params['ID']);

$str = http_build_query($params);
$url = parse_url($str);

echo "http://{$url['host]}";