Avatar billede rooty Nybegynder
10. december 2008 - 19:06 Der er 10 kommentarer

BBkode versus regulære udtryk

Jeg har noget bbkode halløjs, men prøver i disse dage at lave en såkaldt markeringsboks.

Jeg håber nogle derude, kan fortælle mig hvordan jeg indkapsler noget tekst i en streng.

F.eks $hej = "hej med jer, [quote]Her bliver det sjovt[/quote] men ikke længere.";

Så skal jeg have indholdet imellem [quote], men smid ned i en streng - da jeg genbruger indholdet til at smide linietal på igennem en for.
Har prøvet følgende eksempel fra en kammi,

preg_match_all("@\[quote](.?)\[/quote]@i", $str, $result);

for($i = 1; $i <= count($result); $i++) {
    $skift .= $i ."<br />\r\n";
    }
echo "<div class='quote'>$skift". $result[1]."</div>\r\n";

Nogle hoveder derude som kan i det mindste hjælpe mig på rette vej, har knoklet med dette i to dage nu. Næsten tom for muligheder nu. Hjælp! :-)

Ha' en god aften derude.
Avatar billede coderdk Praktikant
11. december 2008 - 02:36 #1
@\[quote](.?)\[/quote]@i

skal være

@\[quote](.*?)\[/quote]@i

muligvis

@\[quote\](.*?)\[/quote\]@i

Du kan bruge preg_replace sammen med en create_function eller blot /e-switchen og lave din replace med det samme ;)
Avatar billede rooty Nybegynder
12. december 2008 - 18:56 #2
Hmm, kan man ikke lave explode på en match_all

f.eks

preg_match_all("@\[quote](.*?)\[/quote]@i", $hej, $streg);

    $linier = explode("\n", $streg);
    $antal = count($linier);

Jeg får blank side. Ja prøvede lige at rode lidt videre istedet for den for linie.
Avatar billede rooty Nybegynder
14. december 2008 - 14:04 #3
Fik det til at virke, næsten da.

$str = "hej med jer, [quote]Her bliver det sjovt[/quote] men ikke længere. Jow ogsaa lige [quote]Her bliver det ogsaa sjovt, med en
ny linie.[/quote]";

if(preg_match("@\[quote\](.*?)\[/quote\]@i", $str, $streg)){
    for($i = 1; $i <= count($streg[1]); $i++) {
    $tal .= $i ."\r\n";
    }

Men den fanger hverken ny linie eller nummer to [quote] - hvad gør jeg galt?
Har også prøvet
$streg[0] = explode("<br />", $streg);

Dvs. hvis der er mere end éen [quote] i teksten, så fanger den kun den første og hvis den har flere linier, skriver den det bare ud i en køre (som om den ikke opfanger linieskift).

Gode idéer modtages med kyshånd
Avatar billede rooty Nybegynder
14. december 2008 - 16:54 #4
Efter lidt ivrigt læsning, fandt jeg frem til liniskift vha. sætte et s efter @i.
Endvidere er jeg blevet oplyst om, at preg_match kun matcher det første resultat og herefter stopper. Derimod _all skulle kunne klare mine krav.

Mange tak for hjælpen :)
Avatar billede coderdk Praktikant
14. december 2008 - 21:53 #5
Du napper bare pointene selv så :)
Avatar billede rooty Nybegynder
16. december 2008 - 17:55 #6
.. Men har stadig problemer faktisk.
Mit preg_match fanger alt indenfor [quote], kanske fint men den udskriver ikke data før eller efter..
Nogen idé til hvordan jeg løser det problem?
Avatar billede rooty Nybegynder
16. december 2008 - 17:58 #7
Du skrev noget omkring at lave min replace med det samme, hvordan hænger den så sammen. Må indrømme at jeg er lidt blank på reg exp og brugen af det.
Avatar billede coderdk Praktikant
16. december 2008 - 22:00 #8
f.eks.:

$txt = preg_replace_callback(
    "@\[quote\](.*?)\[/quote\]@si",
    create_function(
      '$lines'
      ,'$lines = explode( "\n", $lines[1] );
        $l = 0;
        $result = "";
        foreach ( $lines as $line )
        {
            $result .= sprintf( "%02d %s\n", ++$l, $line );
        }
        return $result;'
    )
    ,$str);
   
echo $txt;
Avatar billede rooty Nybegynder
20. december 2008 - 13:50 #9
Okay ligner en lille smule det, jeg har brygget sammen. Men mit basale problem nu er, at den ikke tager tekst før eller efter [quote). Resten virker ganske glimravende.
Avatar billede coderdk Praktikant
20. december 2008 - 15:19 #10
Jo, med min får du teksten før og efter...
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