Avatar billede jl4511 Nybegynder
01. august 2006 - 12:40 Der er 15 kommentarer og
1 løsning

Reg.exp. til nestede quotes

Hej eksperter

Jeg fik *næsten* løst mit problem ved at læse denne tråd: http://www.eksperten.dk/spm/713944

Men løsningen løser ikke nestede qoutes - er der nogen der ved hvordan man gør det?

Nestede quotes: quote inden i en quote, hvis nogen skulle være i tvivl :-)
Avatar billede jl4511 Nybegynder
01. august 2006 - 12:43 #1
Og det er til PHP glemte jeg lige at sige.
Avatar billede barklund Nybegynder
01. august 2006 - 12:59 #2
Du kunne lave den "naive" løsning og satse på, at brugere skriver lige man [quote og [/quote] og så erstatte hver for sig:

$pattern = array("/\[quote forfatter=(.+?) dato=(.+?)\]","\[\/quote\]/i");

$replacement = array(
"
<div align='center'>
    <table cellpadding='0' cellspacing='0' width='90%' height='38'>
        <tr>
            <td valign='top' height='19' width='100%'>
                Citat af: $1, skrevet d.: $2
            </td>
        </tr>
        <tr>
            <td valign='top' height='19' width='100%'>
                ","
            </td>
        </tr>
    </table>
</div>
");

$string = preg_replace($pattern, $replacement, $string);

echo $string;

Prøv engang :)
Avatar billede barklund Nybegynder
01. august 2006 - 12:59 #3
"lige mange" skulle der stå :)
Avatar billede jl4511 Nybegynder
01. august 2006 - 13:27 #4
Den giver denne fejl:
Warning: No ending delimiter '/' found in c:\www\user\main\debat.php on line 837

Warning: Delimiter must not be alphanumeric or backslash in c:\www\user\main\debat.php on line 837

Linie 837 er linien med:
$string = preg_replace($pattern, $replacement, $string);

Jeg kan ikke helt gennemskue hvor den mangler må jeg indrømme.
Har du et bud?
Avatar billede barklund Nybegynder
01. august 2006 - 14:03 #5
Min fejl - prøv:

$pattern = array("#\[quote forfatter=(.+?) dato=(.+?)\]#i","#\[/quote\]#i");

Således :)

--
Morten Barklund
Avatar billede jl4511 Nybegynder
01. august 2006 - 14:34 #6
Perfekt... så virker det :-)
Tusinde tak - lægger du et svar?
Avatar billede barklund Nybegynder
01. august 2006 - 14:47 #7
Det giver bøvl, hvis nogen laver et indlæg med [/quote] uden at starte den korrekt, men sådan er det jo :) Man kan lave noget med at tælle antallet af den ene og den anden - men skal det laves helt korrekt, skal det laves noget længere...
Avatar billede barklund Nybegynder
01. august 2006 - 14:47 #8
Og et svar :)
Avatar billede jl4511 Nybegynder
01. august 2006 - 14:51 #9
Jeg er klar over bøvlet hvis [quote] og [/qoute] ikke stemmer overens.
Men da det er mig der leverer quote'sne, skal de decideret gå hen og slette den ene (og lur mig om ikke nogen kunne finde på det *s*)
Så en lille kontrol-tælling vil nok være en god idé, ja!
Avatar billede barklund Nybegynder
01. august 2006 - 16:21 #10
Tælleri er jo ikke helt nok - det går stadig galt, hvis der er en af hver, men slut kommer før start :)

Men hold og lykke - og tark for points :)

--
Morten Barklund
Avatar billede jl4511 Nybegynder
01. august 2006 - 19:29 #11
Velbekomme!
Så skal de da virkelig nosse rundt i det, hvis slut skal komme før start.
I det hele taget tvivler jeg på at der vil forekomme mere end ét citat per indlæg, så det går nok. Men tak for din respons :o)
Avatar billede jl4511 Nybegynder
01. august 2006 - 19:40 #12
Smider lige den endelige kode, hvis nogen skulle forvilde sig herind med samme problem:

$pattern = array("#\[quote forfatter=(.+?) dato=(.+?)\]#i","#\[/quote\]#i");
$replacement = array("
<div align='center'>
<table width='95%' height='38'>
  <tr>
    <td valign='top' height='19' width='100%'>
      Citat af: $1, den: $2
      <br />
      ","
      $3
    </td>
  </tr>
</table>
</div>
");

$string = preg_replace($pattern, $replacement, $string);
echo $string;
Avatar billede Slettet bruger
04. august 2006 - 00:08 #13
Hvorfor laver du det i arrays? :)
Avatar billede barklund Nybegynder
04. august 2006 - 09:14 #14
For at erstatte alle start med start og alle slut med slut - uanset om de overlapper hinanden. Prøv at neste en quote i en quote - hvis du ikke brugte arrays, men ét langt udtryk, ville den første [quote] bliver (forkert) matchet med den første [/quote], og resten bliver ikke matchet. :)
Avatar billede Slettet bruger
04. august 2006 - 10:46 #15
Ahh oki.. Alternativet er vel at bruge preg_match_all, ikke?
Avatar billede barklund Nybegynder
04. august 2006 - 10:52 #16
Niks - den vil jo ikke fange dem korrekt. Alternativet er at parse fremaf og huske, hvor mange åbne man har nået indtil nu for hver åben/luk, og erstatte korrekt undervejs. Du kan ikke (eller jeg kan ikke i hvert fald), lave et preg, der kan tage højde for dette korrekt.
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