You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP正则表达式如何从字符串中排除两个指定内容?

我懂你的需求啦!现在你的代码已经能搞定/folder123/开头的URL,现在要同时把index.php也一起排除掉,最终只留下后面的?id=foo部分对吧?

其实只需要修改正则表达式,让它同时匹配两种开头模式就行。这里要注意,正则里的.是特殊字符(匹配任意字符),所以index.php里的.要转义成\.才行。

给你两种实现方式,选你顺手的来:

方式一:用preg_replace更简洁(推荐)

因为我们只是要把匹配到的开头替换成空,不需要复杂的回调逻辑,直接用preg_replace就够了:

// $url will actually be $_SERVER['REQUEST_URI']
$url = "/folder123/?id=foo"; 
// 也可以是 "index.php?id=foo"

$result = preg_replace('#^(/folder123/|index\.php)#', '', $url);
echo $result; // 输出: ?id=foo

方式二:沿用你原来的preg_replace_callback

如果你还是想用回调函数,修改正则后也能实现:

// $url will actually be $_SERVER['REQUEST_URI']
$url = "/folder123/?id=foo"; 
// it could be "index.php?id=foo"

$result = preg_replace_callback('#^(/folder123/|index\.php)#', function($match) {
    return ''; // 把匹配到的开头部分替换为空
}, $url);

echo $result; // 输出: ?id=foo

正则表达式说明

  • ^:锚定字符串的开头,确保我们只替换最前面的匹配内容,不会误改URL中间的同名内容
  • (/folder123/|index\.php):用|分隔两种匹配规则,意思是“要么匹配/folder123/,要么匹配index.php”
  • 替换成空字符串后,剩下的就是你想要的查询参数部分啦!

内容的提问来源于stack exchange,提问作者theflarenet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:12:24