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

Jen*_*ell 6 php preg-replace

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

////%postname%/
Run Code Online (Sandbox Code Playgroud)

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

它应该是这样的:

/%postname%/
Run Code Online (Sandbox Code Playgroud)

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

////%postname%//mytest/test///testing
Run Code Online (Sandbox Code Playgroud)

哪个应转换为:

/%postname%/mytest/test/testing
Run Code Online (Sandbox Code Playgroud)

Ali*_*xel 18

干得好:

$str = preg_replace('~/+~', '/', $str);
Run Code Online (Sandbox Code Playgroud)

要么:

$str = preg_replace('~//+~', '/', $str);
Run Code Online (Sandbox Code Playgroud)

甚至:

$str = preg_replace('~/{2,}~', '/', $str);
Run Code Online (Sandbox Code Playgroud)

一个简单的str_replace()也可以做到这一点(如果连续斜线不超过两个):

$str = str_replace('//', '/', $str);
Run Code Online (Sandbox Code Playgroud)

  • str_replace不会这样做.我相信你需要一个递归函数.(看看下面) (4认同)

K-G*_*Gun 5

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