从字符串中删除ID=1234的正则表达式(PHP)
我正在尝试创建一个正则表达式来执行以下操作(在preg_replace中) 如何编写preg_replace来简单地从字符串中删除&ID=1620(考虑到ID可以是可变的字符串长度)从字符串中删除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=)加上在下一个&或字符串结尾之前的任何数量的字符
提前感谢我猜
&
在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]}";