PHP'nin preg_replace ile birden tekrarlarını değiştirmek için doğru sözdizimi

2 Cevap php

Ben benzer fikirler yığın taşması diğer sorular üzerine gittim ama hiçbiri yeterince yakından yapmak ne çalışıyorum benzemeye görünüyor.

Seems simple, but I'm in a pickle. I'm trying to replace multiple occurrences of a line break (\n) with only one line break, so people won't be able to submit more than one line break at a time. Here's what I've tried.

$text = "Foo\n\n\nbar!\n\nfoobar!";
$text = preg_replace("#\n+#", "\n", $text);
echo $text;

Beklenen döndü deyimi olacaktır:

Foo\nbar!\nfoobar!

But no cigar! I tried several but none seemed to work.

Ben yanlış ne yapıyorum?

Teşekkürler!

2 Cevap

Eğer çözümün sadece ilgileniyorsanız, son satıra atlayın.

Here's what ended up happening. I had a div tag in html that contained certain information. When a user hits a button, a JS code runs that converts that div to an input textbox, and sets the value of that textbox as the html of the original div - while replacing all occurrences of <br> with \n to create real line breaks. The form then got submitted via ajax to the server.

When I tried to replace the line breaks in PHP, none of the above suggestions helped, for the simple reason that it wasn't (curiously enough) a "real" linebreak character. What got submitted to the server was the literal \n. You'd think escaping the backslash in \n, as suggested by ghostdog74 would solve the problem but it did not. I tried escaping it several different ways but nothing seemed to help.

Ben bazı eski regex malzemeyi referans sona erdi ve bulundu:

Birçok tatlar da \ S. .. \ E kaçış dizisi destekler. \ Q ve \ E arasındaki tüm karakterler değişmez karakter olarak yorumlanır. Örneğin \ S * \ d + * \ e edebi metin maçları \d+. \ E regex sonunda ihmal edilebilir ... Bu sözdizimi JGsoft motoru tarafından desteklenir, Perl, PCRE ... [source]

Bunu takiben, burada benim sorunum çözüldü kod parçası:

$text = preg_replace('#[\Q\n\E]+#', "\n", $text);

Tüm yardımlarınız için herkese teşekkür! Tüm :) için 1

Ayrıca satır sonları her üç çeşit için kontrol etmek isteyebilirsiniz:

$text = "Foo\n\r\n\n\rbar!\n\nfoobar!";
$text = preg_replace('#(\r\n|\r|\n)+#m', "\n", $text);
echo $text;