PHP 在特定模式之后全部删除


PHP Remove all after particular pattern

我想从字符串(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出现了两次。不知道如何处理这个问题。请帮忙,提前感谢

这样的东西应该可以解决问题(删除最后一个之后的所有内容/)

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

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

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

if(strpos($url,"Group")!==false){
    $url = substr($url,0,strrpos($url,"Group"));
}
%(http://www.example.com/profile/[^/]+/)%

匹配 http://www.example.com/profile/ 后跟这些组之一。

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