Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用表达式删除字符串的一部分_Php_Regex - Fatal编程技术网

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

Php 使用表达式删除字符串的一部分,php,regex,Php,Regex,这可能很简单,但我不是最擅长表达的人。。 我正在尝试从..获取以下字符串 http://www.yoursite.com/offers/838?&SITEID=2172 对此。。使用一个将删除?&SITEID和动态id的表达式,这将有所不同 http://www.yoursite.com/offers/838 有人能推荐最好/最简单的方法吗?如果您想在之前保留零件,您可以搜索 ^(.+?)(\?&SITEID|$) 并替换为 $1 您可以从^行的开头到第一个?&SIT

这可能很简单,但我不是最擅长表达的人。。 我正在尝试从..获取以下字符串

http://www.yoursite.com/offers/838?&SITEID=2172
对此。。使用一个将删除?&SITEID和动态id的表达式,这将有所不同

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

有人能推荐最好/最简单的方法吗?

如果您想在
之前保留零件,您可以搜索

^(.+?)(\?&SITEID|$)
并替换为

$1
您可以从
^
行的开头到第一个
?&SITEID
不贪婪地搜索,而忽略其余部分。如果未找到
?&SITEID
,则使用
$

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

编辑

在您解释需要保留查询字符串其余部分的注释之后,我建议您使用另一种方法:查找

&?SITEID=[^&\s]+
存在

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

并将其从字符串中移除。然而,在这种情况下,我会使用一种非正则表达式、url特定的方法,就像其他答案中建议的那样。

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

^(.+?)(\?&SITEID|$)
$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"
并替换为

$1
您可以从
^
行的开头到第一个
?&SITEID
不贪婪地搜索,而忽略其余部分。如果未找到
?&SITEID
,则使用
$

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

编辑

在您解释需要保留查询字符串其余部分的注释之后,我建议您使用另一种方法:查找

&?SITEID=[^&\s]+
存在

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

并将其从字符串中移除。然而,在这种情况下,我会使用一种非正则的、特定于url的方法,就像其他答案中建议的那样。

一个有效的url只有一个
,因此您可以使用
分解
将其分为两部分

$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"
$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)

一个有效的URL只有一个
,因此您可以使用
分解
将其分成两部分

$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)

这是一个URL,请使用将其解析为一个URL

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

$url = $parts["scheme"] . "://" . $parts["host"] . $parts["path"];

这是一个URL,请使用将其解析为一个URL

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

$url = $parts["scheme"] . "://" . $parts["host"] . $parts["path"];

使用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
}

使用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
}
检查此功能:

$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);
检查此功能:

$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);

您是指任何超过
的内容还是仅限于siteid?只想删除任何超过&siteid的内容-因此保留任何其他查询字符串部分?您是指任何超过
的内容还是仅限于siteid?只想删除任何超过&siteid的内容-因此保留任何其他查询字符串部分