0

这可能很简单但是我不是最好的表达式..我正在尝试从中获取以下字符串..

http://www.yoursite.com/offers/838?&SITEID=2172

为此..使用将删除 ?&SITEID 和动态 id 的表达式会有所不同

http://www.yoursite.com/offers/838  

谁能建议最好/最简单的方法来做到这一点?

4

6 回答 6

2

这是一个 URL,因此将其解析为一个,使用parse_url().

$url = "http://www.yoursite.com/offers/838?&SITEID=2172";
$parts = parse_url($url);

$url = $parts["scheme"] . "://" . $parts["host"] . $parts["path"];
于 2012-10-12T10:17:16.593 回答
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
}
于 2012-10-12T10:17:35.163 回答
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);
于 2012-10-12T10:34:46.373 回答
1

一个有效的 URL 只有一个?,所以你可以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)
于 2012-10-12T10:13:26.417 回答
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"
于 2012-10-12T10:10:36.850 回答
-1

如果您想保留之前的部分,?您可以搜索

^(.+?)(\?&SITEID|$)

并替换为

$1

您从行 ^首到第一行非贪婪地搜索,?&SITEID而忽略其余部分。如果没有?&SITEID找到,则通过到达字符串的末尾来获得整行$

|是告诉正则表达式“在?&SITEID字符串的第一个或结尾处停止”的 OR 运算符

编辑

在您解释需要保留其余查询字符串的评论之后,我建议您采用不同的方法:find

&?SITEID=[^&\s]+

存在

  • &?字符串开头的可选 &
  • SITEID=您要查找的字符串后跟
  • [^&\s]+任意数量的非&、非空格字符

并将其从字符串中删除。但是,在这种情况下,我会采用其他答案中建议的非正则表达式、特定于 url 的方法。

于 2012-10-12T10:09:50.963 回答