簡體   English   中英

正則表達式,只用一個替換多個斜杠

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM