使用表达式删除部分字符串

时间:2012-10-12 10:05:39

标签: php regex

这可能很简单,但我不是最好的表达.. 我试图从..

获取以下字符串
http://www.yoursite.com/offers/838?&SITEID=2172

到这个..使用一个表达式来删除?& SITEID和动态id会有所不同

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

有人能建议最好/最简单的方法吗?

6 个答案:

答案 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]+任意数量的非&非空格字符

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