PHP删除特定模式后的所有内容

时间:2013-11-12 11:35:12

标签: php regex preg-replace

我想从字符串(url)中删除特定模式之后的所有字符。以下是一些示例网址。

http://www.example.com/profile/aaa-bbb/Group
http://www.example.com/profile/ccc-ddd/Group?tab=23
http://www.example.com/profile/Group-sss-t/Group
http://www.example.com/profile/ppp-qqq/

我需要输出为,

http://www.example.com/profile/aaa-bbb/
http://www.example.com/profile/ccc-ddd/
http://www.example.com/profile/Group-sss-t/
http://www.example.com/profile/ppp-qqq/  

实际上,我需要删除Group之后的所有字符,但在第三个utl中,Group出现两次。不知道如何处理这个问题。请帮助,提前谢谢

3 个答案:

答案 0 :(得分:1)

这样的事情可以解决问题(删除最后一个/之后的所有内容)

$newUrl = preg_replace('/(.*)\/.*$/', '$1/', $url);

请参阅:http://phpfiddle.org/main/code/j7c-8gx并按F9查看网址结果:'http://www.example.com/profile/ccc-ddd/Group?tab=23'

答案 1 :(得分:0)

我会使用strrpos女巫找到子串的位置,但从结尾开始:

if(strpos($url,"Group")!==false){
    $url = substr($url,0,strrpos($url,"Group"));
}

答案 2 :(得分:0)

%(http://www.example.com/profile/[^/]+/)%

匹配 http://www.example.com/profile/ ,然后是其中一个组。

因此preg_match_all('%(http://www.example.com/profile/[^/]+/)%', $urls, $matches)将匹配的部分保存在$matches