Регулярное выражение, замените множественные слэши только одним

Похоже, что это легко решить, но это не так просто, как кажется. У меня есть эта строка в PHP:

////%postname%/ 

Это URL-адрес, и я никогда не хочу больше одной косой черты подряд. Я никогда не хочу полностью удалить косые черты.

Вот как это должно выглядеть:

 /%postname%/ 

Я думаю, потому что структура может выглядеть по-другому. Мне нужно умное preg заменить regexp. Ему необходимо работать с такими URL-адресами:

 ////%postname%//mytest/test///testing 

который должен быть преобразован в это:

 /%postname%/mytest/test/testing 

Ну вот:

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

Или:

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

Или даже:

 $str = preg_replace('~/{2,}~', '/', $str); 

Простая str_replace() также выполнит трюк (если не более двух последовательных слэшей):

 $str = str_replace('//', '/', $str); 

Пытаться:

 echo preg_replace('#/{2,}#', '/', '////%postname%//mytest/test///testing'); 
 function drop_multiple_slashes($str) { if(strpos($str,'//')!==false) { return drop_multiple_slashes(str_replace('//','/',$str)); } return $str; } 

это использование str_replace

Поздно, но все эти методы также удалят http:// слэши, но это.

 function to_single_slashes($input) { return preg_replace('~(^|[^:])//+~', '\\1/', $input); } # out: http://localhost/lorem-ipsum/123/456/ print to_single_slashes('http:///////localhost////lorem-ipsum/123/////456/'); 
 echo str_replace('//', '/', $str); 

Мое решение:

 while (strlen($uri) > 1 && $uri[0] === '/' && $uri[1] === '/') { $uri = substr($uri, 1); }