Normal ifade, tek bir ile birden eğik değiştirin

4 Cevap php

Bu çözmek için kolay bir sorun gibi görünüyor, ama bu göründüğü kadar kolay değil. PHP bu dizesi vardır:

////%postname%/

Bu bir URL ve ben bir satırda birden fazla çizgi istemiyorum. Ben tamamen eğik kaldırmak istemiyorum.

Bu gibi görünmelidir nasıl:

/%postname%/

Yapısı farklı görünebilir çünkü ben zeki bir gebelik regexpi değiştirmeniz gerekiyor, sanırım. Bu gibi URL'ler ile çalışmak gerekir:

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

Bu dönüştürülmesi gerekir ki:

/%postname%/mytest/test/testing

4 Cevap

Buyrun:

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

Veya:

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

Ya da:

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

Basit bir (en fazla üst üste iki eğik çizgi varsa) str_replace() de hile yapacak:

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

Deneyin:

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;
}

Bu str_replace kullanıyor

Geç ama tüm bu yöntemler http:// çok bölü kaldırmak, ancak bu olacaktır.

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/');