正则表达式,只用一个替换多个斜杠

时间:2010-02-07 18:28:40

标签: php preg-replace

这似乎是一个容易解决的问题,但它并不像看起来那么容易。我在PHP中有这个字符串:

////%postname%/

这是一个URL,我从不想要连续多个斜杠。我永远不想完全删除斜杠。

这应该是这样的:

/%postname%/

因为结构可能看起来不同,我想需要一个聪明的preg替换正则表达式。它需要像这样使用URL:

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

应转换为:

/%postname%/mytest/test/testing

6 个答案:

答案 0 :(得分:18)

你走了:

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

或者:

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

甚至:

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

一个简单的str_replace()也可以解决这个问题(如果不超过两个连续斜杠):

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

答案 1 :(得分:4)

尝试:

echo preg_replace('#/{2,}#', '/', '////%postname%//mytest/test///testing');

答案 2 :(得分:4)

function drop_multiple_slashes($str)
{
  if(strpos($str,'//')!==false)
  {
     return drop_multiple_slashes(str_replace('//','/',$str));
  }
  return $str;
}

使用str_replace

答案 3 :(得分:3)

迟到但所有这些方法都会删除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/');

答案 4 :(得分:0)

我的解决方案:

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

答案 5 :(得分:-1)

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