Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式最后出现的单词_Php_Regex_Preg Replace_Preg Match - Fatal编程技术网

PHP正则表达式最后出现的单词

PHP正则表达式最后出现的单词,php,regex,preg-replace,preg-match,Php,Regex,Preg Replace,Preg Match,我的字符串是:/var/www/domain.com/public\u html/foo/bar/folder/other/。 我想从这个字符串中删除根文件夹,以便只获取公用文件夹,因为某些服务器内部有多个网站 我的实际正则表达式是:/^(.*)(www|public|html | public|html)/s 我的实际结果是:/domain.com/public\u html/foo/bar/folder/other/。 但是我想删除最后一个ocorrence,得到如下内容:/foo/bar/

我的字符串是:
/var/www/domain.com/public\u html/foo/bar/folder/other/。

我想从这个字符串中删除根文件夹,以便只获取公用文件夹,因为某些服务器内部有多个网站

我的实际正则表达式是:
/^(.*)(www|public|html | public|html)/s

我的实际结果是:
/domain.com/public\u html/foo/bar/folder/other/。

但是我想删除最后一个ocorrence,得到如下内容:
/foo/bar/folder/other/。


谢谢

您必须使用贪婪量词,并使用lookarounds检查替代项是否包含在斜杠之间:

/^.*(?<![^\/])(?:www|public(?:_html)?|html)(?![^\/])/
/^.*?
关于lookarounds:我使用带否定字符类的否定lookarounds来检查是否同时存在斜杠或字符串限制。这样,您可以确保例如
html
是一个文件夹,而不是另一个文件夹名称的一部分


我删除了无用的s修饰符。我也删除了捕获组,因为目标是用空字符串替换所有组。

使您的表达式不贪婪,这实际上不是您想要的。请尝试:

^(.*)(www|public_html|public|html)
应该一直持续到最后一场比赛


演示:

我怎么没有意识到?非常感谢!@chris85您可以保持模式不变,只需添加
U
修饰符。如果输入字符串中没有换行符,请删除
s
。您可以不使用
explode
?正则表达式更好@Script47@Leonardo怎么会?有消息来源吗?我真的很感兴趣因此,它可能是未来使用它的一种激励。