Avatar billede lsolesen Nybegynder
05. september 2003 - 19:28 Der er 10 kommentarer og
1 løsning

Regulær expression til linieskift

Jeg har noget tekst i en database, som jeg skal have lavet linieskift i, og jeg startede med at benytte nl2br.

Nu er det imidlertid sådan, at jeg også skal kunne bruge html-udtryk, og så bliver nl2br lidt dum efter fx <h1>.

I stedet har jeg prøvet lidt med fx:

function formater_tekstfelt($tekst) {
    // erstatter PHPs indbyggede funktion nl2br
    //$search = "'([^<.*? >]\r\n)'";
    $search = "'([^>\n]{1}[\r]{1})'";
    $replace = "\\1<br /><br />\n";
    return preg_replace($search, $replace, $tekst);
}


Den virker også fint på:
http://www.vih.dk/nyheder/?id=246

Men har problemer på:
http://www.vih.dk/nyheder/?id=219

Reglen skal være, at der ikke skal være linieskift efter en linie, der slutter med html-markup, fx <li>, <p> eller <h1>.
Avatar billede erikjacobsen Ekspert
05. september 2003 - 19:39 #1
Noget i retning af dette ??

  function addbr($line) {
  if (eregi('<h1|<li',$line)) {
    return $line;
  } else {
    return $line.'<br>';
  }
  }

  $t = "<h1>Overskrift</h1>\nSå er\nder boller i carry\n";
  print join("\n",array_map("addbr",split("\n",$t)));
Avatar billede lsolesen Nybegynder
05. september 2003 - 19:51 #2
Nu skal det ikke kun være <li>, <h1>, men alle html-tegn, og de slutter vel med </li>, hvis det skal være helt korrekt. I øvrigt bliver oplysningerne trukket ud af en databse, og så er der vist noget med, at linierne sæutter med \n\r, men jeg er ikke den skarpeste kniv i skuffen til regular expressions :)
Avatar billede squashguy Nybegynder
05. september 2003 - 19:59 #3
prøv med

$str = preg_replace("/\r?\n/", "<br>", $str);
$str = preg_replace("/(<[^\/][^>]+>)<br>/", "\\1", $str);
Avatar billede lsolesen Nybegynder
05. september 2003 - 20:09 #4
squashguy > Den siger, at der er en ukendt modifier > i den sidste linie.
Avatar billede erikjacobsen Ekspert
05. september 2003 - 20:12 #5
Det er vel ikke alle htmltags. Hvad er dine regler du vil have?
Avatar billede lsolesen Nybegynder
05. september 2003 - 21:06 #6
Det må vel være noget i retning af, hvis linien slutter med </ et eller andet > så skal der ikke laves <br> efter. Ellers skal der laves <br> efter?
Avatar billede erikjacobsen Ekspert
05. september 2003 - 21:41 #7
Der er <b>ikke</b>
flere boller i
carry i dag.

Skal der være forskel på linieskift på de 3 linier?
Avatar billede lsolesen Nybegynder
05. september 2003 - 22:03 #8
Ja, det skal der faktisk. Der skal ikke være linieskift efter </b>, men efter de andre linier. Det skal bruges til mig selv, så den skal altså kun tage højde for, hvad jeg kan finde på, og jeg vil ikke lave sådanne tilfældige linieskift, men strukturere det i afsnit. Så hvis jeg laver linieskift, er det fordi, der skal være et linieskift med mindre altså jeg bruger html-markup til at lave noget andet.

Fx kan jeg finde på at lave følgende:

<h1>Overskrift</h1>

Det er frustrerende og spændende at programmere.

<ul>
<li>For det er så svært</li>
<li>Det er godt når det lykkes</li>
</ul>

Så skal der altså ikke være linieskift i fx listen eller lige efter overskriften. Til gengæld skal der være et linieskift i de tomme linier under overskiften.
Avatar billede erikjacobsen Ekspert
05. september 2003 - 22:09 #9
Ville det alligevel ikke være fornuftigt nok, når det du er til dig selv,
blot at lave listen af de tags, der - hvis de er på linien - ikke skal
give anledning til <br>? Dvs. blot udvide lidt i mit forslag.

Det kommer selvfølgelig helt an på hvordan du vil bruge det, men igen, med
mit forslag skal du kun lave et forholdsvis simpelt udtryk til det.
Avatar billede lsolesen Nybegynder
05. september 2003 - 22:18 #10
erikjacobsen > Måske har du ret. Det bliver vel ikke særlig kompliceret udtryk at løse reglen i 21:06:57? Hvis det er det, vil jeg arbejde videre med dit forslag.
Avatar billede lsolesen Nybegynder
10. juni 2006 - 17:38 #11
Svar venligst.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester