这可能很简单,但我不是最好的表达.. 我试图从..
获取以下字符串http://www.yoursite.com/offers/838?&SITEID=2172
到这个..使用一个表达式来删除?& SITEID和动态id会有所不同
http://www.yoursite.com/offers/838
有人能建议最好/最简单的方法吗?
答案 0 :(得分:2)
这是一个网址,因此使用 parse_url()
将其解析为一个网址。
$url = "http://www.yoursite.com/offers/838?&SITEID=2172";
$parts = parse_url($url);
$url = $parts["scheme"] . "://" . $parts["host"] . $parts["path"];
答案 1 :(得分:2)
使用explode函数返回一个数组
$url=http://www.yoursite.com/offers/838?&SITEID=2172
$result=explode('?',$url)
print_r($result);
<强>输出强>
array
{
[0]=>http://www.yoursite.com/offers/838
[1]=>?&SITEID=2172
}
答案 2 :(得分:2)
检查此功能:
$str = 'http://www.yoursite.com/offers/838?&SITEID=2172';
function remove_query_arg($var, $url = NULL){
if(!$url){
$url = $_SERVER['REQUEST_URI'];
}
$parsed_url = parse_url($url);
$query_vars = explode('&', $parsed_url['query']);
foreach($query_vars as $key => $value){
$query_vars[$key] = explode('=', $query_vars[$key]);
$query_variables[$query_vars[$key][0]] = $query_vars[$key][1];
}
if(is_array($var)){
foreach($var as $value){
unset($query_variables[$value]);
}
}
elseif(is_string($var)){
unset($query_variables[$var]);
}
$query_vars = array();
foreach($query_variables as $key => $value){
$query_vars[] = $key.($value !== NULL || !empty($value) ? '='.$value : '');
}
$query_str = '';
$query_str = implode('&',$query_vars);
return (isset($parsed_url['scheme']) && !empty($parsed_url['scheme']) ? $parsed_url['scheme'].'://' : '').$parsed_url['host'].(isset($parsed_url['path']) && !empty($parsed_url['path']) ? $parsed_url['path'] : '').(!empty($query_str) ? '?'.$query_str : '');
}
echo remove_query_arg('SITEID', $str);
答案 3 :(得分:1)
有效网址只有一个?
,因此您只需使用explode
将其分为两部分
$url = "http://www.yoursite.com/offers/838?&SITEID=2172";
list($path, $query) = explode("?", $url, "2");
var_dump($path);
输出
string 'http://www.yoursite.com/offers/838' (length=34)
答案 4 :(得分:0)
$url = "http://www.yoursite.com/offers/838?&SITEID=2172";
$str = substr($url, strpos($url, 0, "?&SITEID"));
// $str results in "http://www.yoursite.com/offers/838"
答案 5 :(得分:-1)
如果您想在?
搜索
^(.+?)(\?&SITEID|$)
并替换为
$1
您从非常贪婪的开始 ^
搜索到第一个?&SITEID
并忽略其余部分。如果找不到?&SITEID
,则会通过$
|
是OR运算符,它告诉正则表达式“停在第一个?&SITEID
或字符串末尾”
修改强>:
在评论之后你解释了你需要保留其余的查询字符串我建议你采用不同的方法:发现
&?SITEID=[^&\s]+
是
&?
可选&amp;在字符串的开头SITEID=
您要查找的字符串后跟[^&\s]+
任意数量的非&
非空格字符并将其从字符串中删除。但是,就这种情况而言,我会采用其他答案中建议的非正则表达式,特定于网址的方法。