2016-09-23 5 views
1

Ich versuche, alle nicht Buchstaben aus einem Dateipfad zu entfernen, aber ich muss die Erweiterung am Ende verlassen.Regex ersetzen keine Buchstaben mit '-', aber lassen Sie alle Perioden

Datei Beispiel: $text = cat.jpg

Ich bin Strom mit diesem $text = preg_replace('/[^\\pL\d]+/u', '-', $text); Ergebnis: cat-jpg

Aber dies setzt auch alle Perioden zu einem Bindestrich als auch, sah ich mich um und versuchte, was ich von anderen Einträgen gefunden , aber sie haben die Zeit alle zusammen genommen.

Hilfe wäre willkommen.

+1

Wie sollte sich 'cat.super-fluffy2.jpg.b_ak' herausstellen? – MonkeyZeus

+0

@MonkeyZeus Tricky, aber wahrscheinlich das: cat-super-flaumig2-jpg.b-ak –

+0

Sind Sie sicher? Das stimmt nicht mit der Beschreibung in Ihrem Titel oder Fragetext überein und die angenommene Antwort würde Ihren Erwartungen nicht entsprechen. – MonkeyZeus

Antwort

1

können Sie diese Regex auf Abwechslung und negative Vorschau für Ihre Suche basiert verwenden:

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

RegEx Demo

RegEx Breakup:

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

In PHP-Code:

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

Perfekt, danke. –

Verwandte Themen