我想创建一个正则表达式做以下(内的preg_replace)正则表达式从字符串(PHP)删除ID = 1234
$str = 'http://www.site.com&ID=1620';
$str = 'http://www.site.com';
我怎么会写的preg_replace简单地删除& ID = 1620从字符串(考虑到ID可以是可变字符串长度
由于事先
我想创建一个正则表达式做以下(内的preg_replace)正则表达式从字符串(PHP)删除ID = 1234
$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则params的一个更大的列表的一部分,你可能使用过好...
parse_str($str, $params);
unset($params['ID']);
$str = http_build_query($params);
我猜测&
不允许作为在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如果它是查询字符串中的第一个字符,Gaz也可能需要'[?&]'而不是第一个'&'。 – Paulpro 2012-04-05 12:52:06
你可以使用parse_url
(即如果的网址是形式:http://something.com?id1=1&id2=2
):
$url = parse_url($str);
echo "http://{$url['host]}";
不知道,你从哪里得到这个字符串,但这甚至都不是有效的URI。 – KingCrunch 2012-04-05 12:51:33
我知道它不是一个有效的URL - 它只是系统过程的一部分(太多了)我知道它不是一个有效的URL - str_replace的另一部分删除了?page = something等。字符串 我应该可能把原来的网址没有这个str_replace,使其更清晰。 – Zabs 2012-04-05 12:54:22
你的意思是?ID = ...? – Dion 2012-04-05 12:54:26