2015-04-25 11 views
7

Mam ciąg znaków, który wygląda tak:Wymień kilka kresek z jedną kreską

something-------another--thing 
     //^^^^^^^  ^^ 

chcę wymienić kilka kresek z jednej.

Więc oczekiwany wynik będzie:

something-another-thing 
     //^  ^

Próbowałem użyć str_replace(), ale muszę napisać ponownie kod dla każdej możliwej ilości kresek. Jak mogę zastąpić dowolną liczbę kresek pojedynczą?

Dla Rizier:

Tried:

$mystring = "something-------another--thing"; 
str_replace("--", "-", $mystring); 
str_replace("---", "-", $mystring); 
str_replace("----", "-", $mystring); 
str_replace("-----", "-", $mystring); 
str_replace("------", "-", $mystring); 
str_replace("-------", "-", $mystring); 
str_replace("--------", "-", $mystring); 
str_replace("---------", "-", $mystring); 
etc... 

Ale łańcuch może mieć 10000 linii pomiędzy dwoma słowami.

+1

użyć 'preg_replace'. – Barmar

+0

Czy próbowałeś czegoś? – Rizier123

+2

@ Rizier123 Powiedział, że próbował 'str_replace' – Barmar

Odpowiedz

16

Użyj preg_replace, aby zamienić wzór.

$str = preg_replace('/-+/', '-', $str); 

Wyrażenie regularne -+ pasuje dowolny ciąg od 1 lub więcej znaków myślnika.

Jeśli nie rozumiesz wyrażeń regularnych, przeczytaj samouczek pod numerem www.regular-expression.info.

2

można użyć

<?php 
$string="something-------another--thing"; 
echo $str = preg_replace('/-{2,}/','-',$string); 

Wyjście

something-another-thing