2016-09-23 22 views
1

我想從文件路徑中去掉所有非字母,但我需要在最後留下擴展名。正則表達式用' - '替換非字母,但留下任何句號

文件例如: $text = cat.jpg

我用這個$text = preg_replace('/[^\\pL\d]+/u', '-', $text); 結果電流:cat-jpg

但是,這也轉換爲一個連字符的任何時期,以及,我環顧四周,試了一下,我從其他的帖子發現,但他們只是一起消除了這段時間。

幫助將不勝感激。

+1

應該怎樣把'cat.super-fluffy2.jpg.b_ak'變成什麼樣? – MonkeyZeus

+0

@MonkeyZeus Tricky,但可能是這樣的:cat-super-fluffy2-jpg.b-ak –

+0

你確定嗎?這與您的標題或問題主體中的描述不符,並且接受的答案將無法滿足您的期望。 – MonkeyZeus

回答

1

您可以使用基於交替和負前瞻爲您搜索這個表達式:

[^\pL\pN.]+|\.(?![^.]+$) 

RegEx Demo

正則表達式破碎:

[^\pL\pN.]+ # Search 1 or more of any char that is not DOT and letter and number (unicode) 
|   # OR 
\.   # search for DOT 
(?![^.]+$) # negative lookahead to skip DOT that is just before file extension 

在PHP代碼:

$text = preg_replace('/[^\pL\pN.]+|\.(?![^.]+$)/u', '-', $text); 
+1

完美,謝謝。 –