2010-07-22 13 views
13

Lassen Sie sich sagen, dass ich eine Zeichenfolge wie diese:Mehrere Vorkommen desselben Symbols mit preg_replace ersetzen?

$string = "hello---world"; 

Wie würde ich über das Ersetzen der gehe --- mit einem einzigen Bindestrich? Die Zeichenfolge könnte leicht so aussehen statt:

$string = "hello--world----what-up"; 

Das gewünschte Ergebnis sein sollte:

$string = "hello-world-what-up"; 

Antwort

28
$string = preg_replace('/-{2,}/','-',$string); 
+0

+1 für den Einsatz Klammern. –

+1

Ist die Zahnspange-Leistung deutlich besser als nur '- +'? – Wrikken

+0

Danke! :-D Ist es genauso einfach, einen Bindestrich entfernen zu lassen, wenn der String mit einem beginnt? Zum Beispiel mit "--hello --- world", die sich als "Hallo-Welt" herausstellt? – kasperwf

0

versuchen $string = preg_replace('/-+/', '-', $string)

0
$string = preg_replace('/--+/', '-', $string); 
0

Hier ist die Funktion, die ich bin mit - funktioniert wie ein Charme :)

public static function setString($phrase, $length = null) { 
    $result = strtolower($phrase); 
    $result = trim(preg_replace("/[^0-9a-zA-Z-]/", "-", $result)); 
    $result = preg_replace("/--+/", "-", $result); 
    $result = !empty($length) ? substr($result, 0, $length) : $result; 
    // remove hyphen from the beginning (if exists) 
    $first_char = substr($result, 0, 1); 
    $result = $first_char == "-" ? substr($result, 1) : $result; 
    // remove hyphen from the end (if exists) 
    $last_char = substr($result, -1); 
    $result = $last_char == "-" ? substr($result, 0, -1) : $result;  
    return $result; 
} 
2

Um sie von Anfang und am Ende zu entfernen:

$string = trim($string, '-'); 
+1

Es ist nicht wirklich hilfreich, eine Teilantwort 3 Jahre nach der Frage zu stellen –

+2

Viele kommen über Google ** täglich **. Diese Information wird jeden Tag für diese drei Jahre gelesen und es wird dauern. Leider konnte dies nicht als Kommentar hinzugefügt werden. – dragonattack