Aşırı hat döner kaldır

4 Cevap php

Ben süs gibi bir şey () için, ancak bir dize sınırları içinde arıyorum. Kullanıcılar bazen 2, 3, 4 koyun, ya da ben bu girdiyi gerekir, yazdıktan sonra daha fazla satır döndürür.

Örnek girdi

i like cats


my cat is happy
i love my cat



hope you have a nice day

İstenilen çıkış

i like cats

my cat is happy
i love my cat

hope you have a nice day

Ben yerleşik bir şey göremiyorum, ve bir dize yerine işi yapmak için bunun pek çok tekrarlamalar alacaktı. Ben küçük bir özyinelemeli dize yerine kamçılamak önce, hepinizin vardı ne başka bir öneriniz görmek istedim.

Ben bu biri için bir regex de orada garip bir his var.

4 Cevap

Sonunda bunu başardı, böylece php PCRE sürümünü kullanıyorsanız ve bir de \ n \ n yedek dizesini ihtiyacı, tüm satır sonlarını silin amacıyla ama bir olan gebelik ihtiyacı:

  $body = preg_replace("/\n\n+/", "\n\n", $body);

Doğru yolda beni almak için teşekkürler.

Eğer bunu yapmak için ne kadar metin gerekiyor? Yaklaşık 100k daha az ise o zaman muhtemelen sadece basit bir arama kullanmak ve regex replace (/\n+/ gibi bir şey arama ve ile değiştirin \n) olabilir

Eğer megabayt veri geçmesi gerekiyorsa Öte yandan, o zaman sadece tek bir yeni satır kopyalamak ve görmezden hangi durumda Mulitple newlines, karşılaşılan durumlar dışında, çıkışa girişi kopyalayarak, karakteri metin karakteri ayrıştırmak dinlen.

Çok çok yavaş olacak gibi ben bir özyinelemeli dize olsa yerini tavsiye etmem, geliyor.

Her üç satır sonu dizileri düşünün için:

preg_replace('/(?:\r\n|[\r\n]){2,}/', "\n\n", $str)

Tanımına göre tamam tek satır araları görmezden Aşağıdaki normal ifade birden linebreaks kaldırmanız gerekir:

ereg_replace("\n\n+", "\n\n", $string);

Sen çok kullanışlı olduğunu (ama PHP ile mükemmel paritesindeki değil gibi görünüyor) bu PHP Regular Expression test tool, ile test edebilirsiniz.

[EDIT] '", işe görünmüyordu. Ben sadece web aracında regex test itiraf mı düzeltildi. ;)