Autor Zpráva
sacrebleu
Profil *
Ahoj, prosím poraďte mi, potřebuju nahradit \n konec řádku, vedle něho se však již nesmí vyskytovat žádný konec řádku ani zleva ani zprava - zkoušel jsem:
$text = preg_replace("(\[^\\n]\\n(.+?)[^\\n])", " $1", $text);


Ale prostě nevím co kde píšu špatně, hledal jsem všude možně, prosím poradíte mi někdo? Děkuji
Johnik
Profil
Je potřeba definovat multiline.
sacrebleu
Profil *
Moc nevím co to je... ^ a tohle $ ?
lordfrikk
Profil
Chápu to správně tak, že chceš mít pouze jedno zalomení za sebou (tj. ne třeba 3 zalomení = prázdné řádky)? Pokud ano, něco takového by stačilo?

<?php
$text = 'bla



bla';
$text = preg_replace("/(?:\n|\r\n?){2,}/", PHP_EOL, $text);
echo nl2br($text);
/*
vysledek je:
bla<br />
bla
*/
?>
sacrebleu
Profil *
Ne, chtěl bych když budu mít řetězec:
Blabla
Ahoj



Nazdar!





Aby se nahradil konec řádku co je mezi Blabla a Ahoj mezerou a žádný jiný...
imploder
Profil
<?php
// text na víc řádků
$text1 = 'Blabla
Ahoj



Nazdar!


';

// modifikátor "m" způsobí, že výraz není omezený jen na 1 řádek
$text2 = preg_replace('/(?<=[^\n])\n(?=[^\n])/m', ' ', $text1);

// výpis: osamocené konce řádků se přeměnily na mezery
header('Content-Type: text/plain; charset=utf-8');
echo "původní text: \"$text1\"\n";
echo "nový text: \"$text2\"\n";
?>
sacrebleu
Profil *
Díky, funguje super! Já sem zatím zplichtil tohle
$text = preg_replace("/(.+?)(\\n){1}(.+?)/", '$1'.' '.'$3' , $text);


Taky to funguje jak má, ale čas scriptu je o mnoho delší... proč? O:-)
sacrebleu
Profil *
Jo a ještě jedna trapná otázka - ty zpětná lomítka se už escapovat nemusí? Myslím tím třeba \n za \\n?
imploder
Profil
sacrebleu:
Taky to funguje jak má, ale čas scriptu je o mnoho delší... proč? O:-)
Asi proto, že je to o dost složitější a pracuje se ne s jedním znakem, ale s velkými kusy řětězce ($1 a $3). Bylo by potřeba zjistit, jak přesně vyhodnocování toho výrazu probíhá. Obecně je určitě dobré se držet co nejjednodušších výrazů.

Jo a ještě jedna trapná otázka - ty zpětná lomítka se už escapovat nemusí? Myslím tím třeba \n za \\n?
Nemusí, protože je to v apostrofech. Escapovat lomítkem se dá jenom v řetězcích zapsaných v uvozovkách.
sacrebleu
Profil
Díky, moc mi to pomohlo!
sacrebleu
Profil
Zde je to k čemu jsem to potřeboval... kdo chce, může třeba využít, nebo poradit jak to zjednodušit...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: