Avatar billede htx98i17 Professor
26. februar 2011 - 10:35 Der er 8 kommentarer og
1 løsning

erstat * punkter med UL

Er det en som kan lave en reg exp som erstatter:


Tekst tekst tekst tekst tekst
* Egenskab 1
* Egenskab 2
* Egenskab 3
tekst tekst tekst tekst tekst


med


Tekst tekst tekst tekst tekst
<ul class="pkt">
  <li>Egenskab 1</li>
  <li>Egenskab 2</li>
  <li>Egenskab 3</li>
</ul>
tekst tekst tekst tekst tekst


Antal egenskaber kan variere og "tekst"/"Egenskab" er naturligvis dummy tekst.
Avatar billede johny Nybegynder
27. februar 2011 - 11:55 #1
Hmm, kan et punkt bestå af flere linier?

For ellers, hvis du laver et Regex.Replace med indstillingen "Multiline", så skulle følgende to kunne gøre det:

"^\*([^\r\n]*)" med "<li>$1</li>"
"^((?:\<li\>[^\<]*\</li>\r\n)+)" med "<ul class="pkt">$1</ul>"

Hvis der er andet der skal tages højde for, må du lige sige til.
Avatar billede htx98i17 Professor
27. februar 2011 - 15:26 #2
Et punkt kan vel godt bestå af linjeskift, men tænker ikke det bliver aktuelt.

Jeg troede jeg selv kunne sætte din reg exp ind i PHP, men jeg forstår desværre ikke hvordan det skal gøres.

Kan du finde ud af det?

<?php echo(ereg_replace("regexp"),$tekst)); ?>
Avatar billede htx98i17 Professor
27. februar 2011 - 15:32 #3
<?php echo(ereg_replace("regexp",$tekst)); ?>
Avatar billede johny Nybegynder
27. februar 2011 - 18:16 #4
Er ikke lige PHP jeg er skarpest til, men det her tror jeg virker:

<?php echo(preg_replace("^((?:\<li\>.*?\</li>\r\n)+)", "<ul class="pkt">$1</ul>", preg_replace("^\*([^\r\n]*)", "<li>$1</li>", $tekst))); ?>

Jeg opdagede også lige en fejl i udtrykket (det tog ikke højde for tilstedeværelsen af andre "<" tegn), men det er rettet nu.

Problemet med at et punkt består af linjeskift er, at så har du ikke en definition for hvornår noget er et punkt, og hvonår det ikke er. I dit eksempel vil følgende:
"* Egenskab 3
tekst tekst tekst tekst tekst"
blive til ét stort punkt, med mindre du har en anden måde at afslutte listen på.
Avatar billede htx98i17 Professor
27. februar 2011 - 18:26 #5
Jeg kan noget PHP og det der giver ikke mening for mig hehe. Det giver en syntax fejl.
Avatar billede johny Nybegynder
28. februar 2011 - 10:04 #6
hmm, hvor gemmer du din text? Sådan her burde det kunne lade sig gøre i hvert fald:

<?php
$text = "Tekst tekst tekst tekst tekst
* Egenskab 1
* Egenskab 2
* Egenskab 3
tekst tekst tekst tekst tekst";

$text = preg_replace("^\*([^\r\n]*)", "<li>$1</li>", $text);

$text = preg_replace("^((?:\<li\>.*?\</li>\r\n)+)", "<ul class="pkt">$1</ul>", $text);

echo $text;
?>
Avatar billede htx98i17 Professor
28. februar 2011 - 14:39 #7
Warning: preg_replace() [function.preg-replace]: Unknown modifier ' ' in list.php on line 175

Den skriver denne fejlmeddelelse. Jeg har prøvet at ændre gåseøjn til qoutes, men det hjalp ikke.
Avatar billede htx98i17 Professor
28. februar 2011 - 14:40 #8
og næste linje siger følgende fejl:
Warning: preg_replace() [function.preg-replace]: No ending delimiter '^' found in list.php on line 177
Avatar billede htx98i17 Professor
07. august 2011 - 16:34 #9
Tak for deltagelsen.
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
Kurser inden for grundlæggende programmering

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