我的字符串是:/var/www/domain.com/public_html/foo/bar/folder/another/..
我想从这个字符串中删除根文件夹,只获取公共文件夹,因为有些服务器内部有多个网站。
我的实际regex是:/^(.*?)(www|public_html|public|html)/s
我的实际结果是:/domain.com/public_html/foo/bar/folder/another/..
但我想去掉最后一个电流,然后得到这样的东西:/foo/bar/folder/another/..
谢谢!
最佳答案
必须使用贪心量词,并使用lookarounds检查替代词是否包含在斜线之间:
/^.*(?<![^\/])(?:www|public(?:_html)?|html)(?![^\/])/
关于lookarounds:我使用带否定字符类的负lookarounds来检查是否同时存在斜线或字符串的限制。这样您就可以确定,例如
html
是一个文件夹,而不是另一个文件夹名的一部分。我移除了无用的s修饰符。我也删除了捕获组,因为目标是用空字符串替换所有捕获组。