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
相关产品推荐
相关产品推荐

