正则表达式,将多个斜杠替换为一个

发布于 2024-08-20 17:57:21 字数 391 浏览 3 评论 0原文

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

////%postname%/

这是一个 URL,我永远不想在一行中出现多个斜杠。我从来不想完全删除斜线。

它应该是这样的:

/%postname%/

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

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

应将其转换为:

/%postname%/mytest/test/testing

It seems like an easy problem to solve, but It's not as easy as it seems. I have this string in PHP:

////%postname%/

This is a URL and I never want more than one slash in a row. I never want to remove the slashes completely.

This is how it should look like:

/%postname%/

Because the structure could look different I need a clever preg replace regexp, I think. It need to work with URLS like this:

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

which should be converted to this:

/%postname%/mytest/test/testing

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

晚风撩人 2024-08-27 17:57:21

给你:

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

或:

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

甚至:

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

一个简单的 str_replace() 也能达到目的(如果连续斜杠不超过两个):

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

Here you go:

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

Or:

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

Or even:

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

A simple str_replace() will also do the trick (if there are no more than two consecutive slashes):

$str = str_replace('//', '/', $str);
娇妻 2024-08-27 17:57:21

晚了,但所有这些方法也会删除 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/');

Late but all these methods will remove http:// slashes too, but this.

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/');
冬天旳寂寞 2024-08-27 17:57:21

尝试:

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

Try:

echo preg_replace('#/{2,}#', '/', '////%postname%//mytest/test///testing');
一百个冬季 2024-08-27 17:57:21
function drop_multiple_slashes($str)
{
  if(strpos($str,'//')!==false)
  {
     return drop_multiple_slashes(str_replace('//','/',$str));
  }
  return $str;
}

这是使用 str_replace

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

that's using str_replace

冷…雨湿花 2024-08-27 17:57:21

我的解决方案:

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

My solution:

while (strlen($uri) > 1 && $uri[0] === '/' && $uri[1] === '/') {
    $uri = substr($uri, 1);
}
抱着落日 2024-08-27 17:57:21
do $str = str_replace('//', '/', $str, $count); while($count);
do $str = str_replace('//', '/', $str, $count); while($count);
热血少△年 2024-08-27 17:57:21
echo str_replace('//', '/', $str);
echo str_replace('//', '/', $str);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文