[英]Regular expression, replace multiple slashes with only one
這似乎是一個容易解決的問題,但它並不像看起來那么容易。 我在 PHP 中有這個字符串:
////%postname%/
這是一個 URL,我永遠不想連續使用多個斜杠。 我從不想完全刪除斜線。
它應該是這樣的:
/%postname%/
因為結構可能看起來不同,我認為我需要一個聰明的 preg 替換正則表達式。 它需要像這樣使用 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/');
我的解決方案:
while (strlen($uri) > 1 && $uri[0] === '/' && $uri[1] === '/') {
$uri = substr($uri, 1);
}
do $str = str_replace('//', '/', $str, $count); while($count);
echo str_replace('//', '/', $str);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.