我正试图用正则表达式删除部分字符串(恰好是一个url)。我正在改进正则表达式,但无法弄清楚如何告诉它字符串之前或之后的内容是可选的。这就是我所拥有的
$string='http://www.example.com/username?refid=22';
$new_string= preg_replace('/[/?refid=0-9]+/', '', $string);
echo $new_string;
我正在尝试移除?refid=22
部分以获取http://www.example.com/username
想法?
修改
我认为我需要使用Regex而不是爆炸,因为有时网址看起来像http://example.com/profile.php?id=9999&refid=22
在这种情况下我还要删除refid
但不要获取id=9999
答案 0 :(得分:8)
parse_url()
适用于解析网址:)
$string = 'http://www.example.com/username?refid=22';
$url = parse_url($string);
// Ditch the query.
unset($url['query']);
echo array_shift($url) . '://' . implode($url);
http://www.example.com/username
如果您只想删除该特定的GET参数,请执行此操作...
parse_str($url['query'], $get);
unset($get['refid']);
$url['query'] = http_build_query($get);
http://example.com/profile.php?id=9999
如果您有扩展程序,则可以使用http_build_url()
重建网址。
否则,您可以对用户名/密码/端口进行假设并自行构建。
只是为了好玩,这是对正则表达式的修正。
preg_replace('/\?refid=\d+\z/', '', $string);
[]
是一个角色类。你试图在那里放置一个特定的字符顺序。\
是转义字符,而不是/
。\d
是字符类[0-9]
的简短版本。\z
)放在那里因为看起来它总是在你的字符串的末尾。如果没有,请将其删除。答案 1 :(得分:4)
如果您不需要
,请不要使用正则表达式echo current( explode( '?', $string ) );