2017-09-15 175 views
3

我的字符串是:/var/www/domain.com/public_html/foo/bar/folder/another/..PHP正則表達式最後一次出現

我想從這個字符串中刪除根文件夾中,只得到公用文件夾,因爲一些服務器裏面有多個網站。

我的實際正則表達式是:/^(.*?)(www|public_html|public|html)/s

我的實際結果是:/domain.com/public_html/foo/bar/folder/another/..

,但我想刪除最後ocorrence,並獲得somethig這樣的:

謝謝!

+0

我怎麼沒有意識到這一點? 非常感謝你! @ chris85 – Leonardo

+0

您可以保持原樣,只需添加'U'修飾符。如果輸入字符串中沒有換行符,則刪除's'。 –

+0

你不能使用'explode'? – Script47

回答

3

你必須使用一個貪婪的量詞使用lookarounds檢查,如果替代的斜線之間封閉:

/^.*(?<![^\/])(?:www|public(?:_html)?|html)(?![^\/])/ 

關於lookarounds:我用一個否定的字符類負lookarounds以檢查是否存在斜槓或字符串的限制在同一時間。通過這種方式,您可以確定例如html是一個文件夾,而不是其他文件夾名稱的一部分。

我刪除了無用的s修飾符。我也刪除了捕獲組,因爲目標是用空字符串替換全部。

+0

是啊!你搖滾。現在好多了,謝謝! – Leonardo

2

?使你的表情不貪心,這實際上並不是你想要的。嘗試:

^(.*)(www|public_html|public|html) 

應該繼續前進,直到最後一場比賽。

演示:https://regex101.com/r/v5WbB3/1/

相關問題