`Biriyle -` - birden değiştirilmesi `regexp olmadan

5 Cevap php

Ben RegExp çok suistimallere gördüm, ben gerçekten sevmiyorum :)

Böyle bir şey olabilir (iki str_replace s sonucu) dizesi vardır:

.?This iš my ".stRiNg."!
          |
          V
--this-is-my---string---

Daha iyi bir yolu var mı

$string = trim(preg_replace('/[-]+/u','-', $string),'-');

almak için:

this-is-my-string

?

5 Cevap

Eğer bir 'iyi' bir şekilde arıyoruz neden ben anlamıyorum. Sizin yolu bunu yapmak için son derece uygun olan bir yerde basit bir regex kullanır. Bundan daha iyi ne olabilir?

print implode('-', array_filter( explode( '-', $string) ) );

Kolay. :)

Daha iyi bir yolu? Muhtemelen değil. Başka bir yolu? Evet (Brant'in cevabı aslında bir satırı sürümü):

implode('-', array_filter(explode('-', $string), function($s) { return strlen($s); }));

Eğer sırf !!"0" == false PHP, array_filter güvenilir çıplak kullanamazsınız unutmayın.

Yani gitmek istiyorum

--this-is-my---string---

karşı

this-is-my-string?

En iyi yolu, bir reg exp olurdu, ama sen php basit bir çözüm istiyorsanız kullanabilirsiniz

$string = "--this-is-my---string---";
while (! strpos($string, "--") === false) {
  $string = str_replace("--", "-", $string);
}

Döngü sonra $string sonucunu içerecektir.

Sadece rekabet uğruna:

$string = str_replace('--','-', str_replace('--','-', '--this-is-my---string---'));

Bunu yapmanın en hızlı yoludur. Bu ilk çift yerini single - ve daha sonra tek bu yüzden sadece, tekrar geri kalanını temizler - kalır.