2016-09-23 8 views
1

ファイルパスから非文字をすべて削除しようとしていますが、最後に拡張子を残す必要があります。Regexは非文字を ' - 'で置き換えますが、ピリオドは残します。

ファイルの例: $text = cat.jpg

私はこの$text = preg_replace('/[^\\pL\d]+/u', '-', $text); 結果使用して、現在の午前:cat-jpg

をしかし、これはまた、同様にハイフンに任意の期間を変換し、私は周りを見回したと私は他の記事から見つけたものを試してみましたしかし、彼らはすべて一緒に期間を削除しました。

助けていただければ幸いです。

あなたは、検索のための交代と否定先読みに基づいて、この正規表現を使用することができます
+1

'cat.super-fluffy2.jpg.b_ak'はどうすればいいですか? – MonkeyZeus

+0

@MonkeyZeus難しいかもしれないが、おそらくこれはcat-super-fluffy2-jpg.b-ak –

+0

本当ですか?それはあなたのタイトルや質問体の記述と一致せず、受け入れられた答えはあなたの期待に合わないでしょう。 – MonkeyZeus

答えて

1

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

RegEx Demo

を正規表現の分裂:PHPコードで

[^\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 

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

パーフェクト、ありがとう。 –

関連する問題