これはおそらく単純ですが、私は式が得意ではありません。次の文字列を取得しようとしています。
http://www.yoursite.com/offers/838?&SITEID=2172
これに..変化する?&SITEIDと動的IDを削除する式を使用する
http://www.yoursite.com/offers/838
誰かがこれを行うための最良/最も簡単な方法を提案できますか?
これは URL であるため、parse_url()
.
$url = "http://www.yoursite.com/offers/838?&SITEID=2172";
$parts = parse_url($url);
$url = $parts["scheme"] . "://" . $parts["host"] . $parts["path"];
分解関数を使用すると配列が返されます
$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);
有効なURLは1つしかないため、2つの部分に分割するために?
使用できます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)
$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"
の前の部分を残したい場合は、?
検索できます
^(.+?)(\?&SITEID|$)
と置き換えます
$1
行の先頭から最初の行 ^
まで貪欲に検索?&SITEID
せず、残りを除外します。no?&SITEID
が見つかった場合は、文字列の最後に到達することで行全体を取得します$
|
?&SITEID
正規表現に「文字列の最初または最後で停止する」ことを伝える OR 演算子です。
編集:
残りのクエリ文字列を保持する必要性を説明するコメントの後に、別のアプローチをお勧めします。
&?SITEID=[^&\s]+
であること
&?
文字列の先頭にあるオプションの &SITEID=
探している文字列に続いて[^&\s]+
任意の数の非&
スペース文字そして紐から外します。ただし、この場合、他の回答で提案されているような、正規表現以外のURL固有のアプローチを使用します。