PHP 正则表达式最后一次出现的单词
PHP regex last occurrence of words
我的字符串是:/var/www/domain.com/public_html/foo/bar/folder/another/..
我想从这个字符串中删除根文件夹,只得到 public 文件夹,因为有些服务器里面有多个网站。
我的实际正则表达式是:/^(.*?)(www|public_html|public|html)/s
我的实际结果是:/domain.com/public_html/foo/bar/folder/another/..
但我想删除最后一个 ocorrence,并得到这样的东西:/foo/bar/folder/another/..
谢谢!
您必须使用贪心量词并使用环视检查替代项是否包含在斜杠之间:
/^.*(?<![^\/])(?:www|public(?:_html)?|html)(?![^\/])/
关于lookarounds:我使用否定字符class的negative lookarounds同时检查是否有斜杠或字符串的限制。这样你就可以确定 html
是一个文件夹而不是另一个文件夹名称的一部分。
我删除了无用的 s 修饰符。我也删除了捕获组,因为目标是用空字符串替换所有。
?
使你的表达式不贪婪,这实际上不是你想要的。尝试:
^(.*)(www|public_html|public|html)
应该一直持续到最后一场比赛。
我的字符串是:/var/www/domain.com/public_html/foo/bar/folder/another/..
我想从这个字符串中删除根文件夹,只得到 public 文件夹,因为有些服务器里面有多个网站。
我的实际正则表达式是:/^(.*?)(www|public_html|public|html)/s
我的实际结果是:/domain.com/public_html/foo/bar/folder/another/..
但我想删除最后一个 ocorrence,并得到这样的东西:/foo/bar/folder/another/..
谢谢!
您必须使用贪心量词并使用环视检查替代项是否包含在斜杠之间:
/^.*(?<![^\/])(?:www|public(?:_html)?|html)(?![^\/])/
关于lookarounds:我使用否定字符class的negative lookarounds同时检查是否有斜杠或字符串的限制。这样你就可以确定 html
是一个文件夹而不是另一个文件夹名称的一部分。
我删除了无用的 s 修饰符。我也删除了捕获组,因为目标是用空字符串替换所有。
?
使你的表达式不贪婪,这实际上不是你想要的。尝试:
^(.*)(www|public_html|public|html)
应该一直持续到最后一场比赛。