3

我想使用 preg_expression 从 URL 中删除所有出现的特定参数模式。如果存在,也删除最后一个“&”模式看起来像:make=xy(“make”是固定的;“xy”可以是任意两个字母)

例子:

http://example.com/index.php?c=y&make=yu&do=ms&r=k&p=7&

处理后preg_replace,结果应该是:

http://example.com/index.php?c=y&do=ms&r=k&p=7

我尝试使用:

$url = "index.php?ok=no&make=ae&make=as&something=no&make=gr";
$url = preg_replace('/(&?lang=..&?)/i', '', $url);

但是,这效果不佳,因为我在 URL 中有 make=xx 的重复项(这种情况可能发生在我的应用程序中)。

4

5 回答 5

7

为此,您不需要 RegEx:

$url = "http://example.com/index.php?ok=no&make=ae&make=as&something=no&make=gr&";

list($file, $parameters) = explode('?', $url);
parse_str($parameters, $output);
unset($output['make']); // remove the make parameter

$result = $file . '?' . http_build_query($output); // Rebuild the url
echo $result; // http://example.com/index.php?ok=no&something=no
于 2013-04-03T09:25:58.703 回答
2

您可以尝试使用:

$str = parse_url($url, PHP_URL_QUERY);
$query = array();
parse_str($str, $query);
var_dump($query);

这会将查询作为数组返回给您。然后,您可以使用 http_build_query() 函数在查询字符串中恢复数组。

但是如果你想使用正则表达式:

$url = "index.php?make=ae&ok=no&make=ae&make=as&something=no&make=gr";
echo $url."\n";
$url = preg_replace('/\b([&|&]{0,1}make=[^&]*)\b/i','',$url);
$url = str_replace('?&','?',$url);
echo $url;

这将删除 URL 中的所有 make

于 2013-04-03T09:24:51.840 回答
0

rtrim你可以删除最后一个&

$url = rtrim("http://example.com/index.php?c=y&make=yu&do=ms&r=k&p=7&","&");
$url = preg_replace('~&make=([a-z\-]*)~si', '', $url);
于 2013-04-03T09:13:01.680 回答
0
$url = "index.php?ok=no&make=ae&make=as&something=no&make=gr";
$url = preg_replace('/(&?make=[a-z]{2})/i', '', $url);
echo $url;
于 2013-04-03T09:13:31.120 回答
0

只需使用 preg_replace

$x = "http://example.com/index.php?c1=y&make=yu&do1=ms&r1=k&p1=7&";

$x = preg_replace(['/(\?make=[a-z]*[&])/i', '/(\&make=[a-z]*[^(&*)])/i', '/&(?!\w)/i'], ['?','',''], $x);
echo $x;

结果是:http ://example.com/index.php?c1=y&do1=ms&r1=k&p1=7

希望这对你们有帮助。

于 2019-07-17T05:51:25.780 回答