0

次のことを行うための正規表現を作成しようとしています(preg_replace内)

$str = 'http://www.site.com&ID=1620';

$str = 'http://www.site.com';

文字列から&ID = 1620を削除するpreg_replaceを作成するにはどうすればよいですか(IDは可変の文字列長である可能性があることを考慮に入れて)

前もって感謝します

4

3 に答える 3

3

属性&の文字としては許可されていないと思います。IDその場合は、

$result = preg_replace('/&ID=[^&]+/', '', $subject);

または(PaulP.ROのおかげでおそらくもっと良い):

$result = preg_replace('/[?&]ID=[^&]+/', '', $subject);

これ により、文字列の次または最後まで続く文字数に加えて &ID=(2番目のバージョンでも削除されます)削除されます。このアプローチにより、次の属性がすべてそのままになります。?ID=&

$str = 'http://www.site.com?spam=eggs&ID=1620&foo=bar';

に変更されます

$str = 'http://www.site.com?spam=eggs&foo=bar';
于 2012-04-05T12:50:40.503 に答える
3

あなたが使うことができます...

$str = preg_replace('/[?&;]ID=\d+/', '', $str);

これは通常のURLであると想定しているため、[?&;]。その場合は、である&必要があり?ます。

GETパラメータのより大きなリストの一部である場合は、おそらく...を使用する方がよいでしょう。

parse_str($str, $params);

unset($params['ID']);

$str = http_build_query($params);
于 2012-04-05T12:50:58.647 に答える
3

次の形式を使用できます (つまり、URLが次の形式の場合)。parse_url
http://something.com?id1=1&id2=2

$url = parse_url($str);

echo "http://{$url['host]}";
于 2012-04-05T12:53:27.613 に答える