Hemen sonrasında bir yeni satır değil, bir yeni satır bulma

3 Cevap php

(PHP ...) Ben bir metin bloğunu almak ve tüm sabit hat böylece) (wordwrap kullanarak belirli bir hat uzunluğu yeniden sarılmış olabilir tatili kaldırmak için çalışıyorum.

Ancak, birden fazla paragraf var olası beri, ben tek bir yeni satır kaldırmak için bir yol gerekir varsayarak yaşıyorum, ama üst üste iki değil.

Eğer bu doğruysa, ben nasıl n \ bulmak söylüyorlar ama bir normal ifadede n \ n \ değil mi? Yoksa bu yanlış şekilde yaklaşıyorum?

3 Cevap

Deneyin:

preg_replace('!(?<!\n)\n(?!\n)!', '', $input);

Lookahead and Lookbehind Zero-Width Assertions Bu nasıl çalıştığını görün.

Bu bir satır ile önce veya sonra değil herhangi satırsonlarını kaldırır. Eğer bu combo var, aksi takdirde hem yapmak zorunda:

This is some text\n\n

o bir satır takip değil (ama tek öncesinde) çünkü bir satır ama ikinci irade tarafından takip edilir sonra ilk (satır yeni satır değil) maç olmayacak.

Alternatif olarak bunu yapabilirsiniz:

preg_replace_callback('!\n+!', 'replace_newline', $input);

function replace_newline($matches) {
  return strlen($matches[0]) == 1 ? '' : $matches[0];
}

Ayrıca ben sadece de r \ satırsonlarını demek ve yok kabul ettik. Her iki durumda da, bu çözelti için ayarlanabilir.

Ben zaten bir yanıt kabul ettik görmek ama ben bu dışarı atmak düşündüm:

preg_replace("|\n{1}|", "");

Bu temelde 'tüm örneğini "1 ve sadece 1 yeni hat" "boşluk" ile değiştirin' diyor.

Ben bunu denedim değil gibi bu bir tahmin daha fazladır. Ama min "sınır" kesinlikle maç gerekiyordu.

Emin değilim bu iyi çözümdür ama sadece n \ n \ aramak ilk bir regex kullanmak olamazdı - şey (örneğin
) ile değiştirin - ve sonra \ n arar?