2012-04-05 36 views
0

我想创建一个正则表达式做以下(内的preg_replace)正则表达式从字符串(PHP)删除ID = 1234

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

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

我怎么会写的preg_replace简单地删除& ID = 1620从字符串(考虑到ID可以是可变字符串长度

由于事先

+2

不知道,你从哪里得到这个字符串,但这甚至都不是有效的URI。 – KingCrunch 2012-04-05 12:51:33

+0

我知道它不是一个有效的URL - 它只是系统过程的一部分(太多了)我知道它不是一个有效的URL - str_replace的另一部分删除了?page = something等。字符串 我应该可能把原来的网址没有这个str_replace,使其更清晰。 – Zabs 2012-04-05 12:54:22

+0

你的意思是?ID = ...? – Dion 2012-04-05 12:54:26

回答

3

您可以使用...

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

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

如果它是GET则params的一个更大的列表的一部分,你可能使用过好...

parse_str($str, $params); 

unset($params['ID']); 

$str = http_build_query($params); 
3

我猜测&不允许作为在ID属性的字符,在这种CA SE,您可以用

$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'; 
+1

+1如果它是查询字符串中的第一个字符,Gaz也可能需要'[?&]'而不是第一个'&'。 – Paulpro 2012-04-05 12:52:06

3

你可以使用parse_url
(即如果的网址是形式:http://something.com?id1=1&id2=2):

$url = parse_url($str); 

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

只要OP不需要任何GET参数,这将很好地工作。 – alex 2012-04-05 12:54:29

+0

@alex它看起来并不像OP所希望的那样,即使他做了,OP也可以使用'parse_url'返回的其他数组元素来查看它们。 – Neal 2012-04-05 12:55:33

+0

这不会起作用....如果URL是'http://www.site.com&ID = 1620'但是如果URL是'http://www.site.com?ID = 1620', parse_url'可以很容易混淆使用'?'和'&' – Baba 2012-04-05 12:57:52

相关问题