0

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

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

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

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

提前致谢

4

3 回答 3

3

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

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

或(可能更好,感谢 PaulP.RO):

$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';
于 2012-04-05T12:50:40.503 回答
3

你可以用...

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

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

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

parse_str($str, $params);

unset($params['ID']);

$str = http_build_query($params);
于 2012-04-05T12:50:58.647 回答
3

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

$url = parse_url($str);

echo "http://{$url['host]}";
于 2012-04-05T12:53:27.613 回答