Avatar billede jensgram Nybegynder
14. januar 2004 - 10:35 Der er 9 kommentarer og
1 løsning

Highlight og preg_replace

Hej eksperten

Jeg har en tekst ($file - et tekst-dokument) der indeholder tekst, HTMl og <?php [...] ?>. Jeg prøver nu med:

    $file = preg_replace("/<\?php([^\?>]+)\?>/e", "'<p>' . highlight_string('\\0', true) . '</p>'", $file);

At få PHP til at farve PHP'en, men det virker kun i nogle tilfælde. Det skal siges, at det er første gang jeg benytter preg, så det kan sikkert laves smartere. Tanken er:

- <?php
- "Alt som ikke er ?>"
- ?>

Skal blive til

<p>["<?php ... ?> farvet"]</p>

Hvad gør jeg galt, og hvorfor virker den i nogle tilfælde?
Avatar billede jensgram Nybegynder
14. januar 2004 - 10:36 #1
<?php

function breadcrumb()
{
    $root = 'http://www.ditdomæne.dk/';
}

?>

Bliver fint farvet, mens:

<?php

function breadcrumb()
{
    $root = 'http://www.jensgram.dk/'; // Domænet
    $dirs = explode('/', $_SERVER['PHP_SELF']); // Split ved slashes
    $size = sizeof($dirs)-1; // Antal biblioteker
    $outp = '<a href="' . $root . '">Forside</a>';
    $div  = ' / '; // Streng mellem biblioteker i output
    $fnam = substr($dirs[$size], 0, strrpos($dirs[$size], '.')); // Filnavn (mellem begyndelse af sidste element i $dirs-array'et og (sidste) punktum)

    return $outp;
}

?>

Ikke ændres?!?
Avatar billede erikjacobsen Ekspert
14. januar 2004 - 10:43 #2
Prøv  - utestet

$file = preg_replace("/<\?php(.*?)\?>/e", "'<p>' . highlight_string('\\0', true) . '</p>'", $file);
Avatar billede jensgram Nybegynder
14. januar 2004 - 10:52 #3
erik > Desværre. Nu fanger den slet ikke noget...
Avatar billede jensgram Nybegynder
14. januar 2004 - 10:53 #4
"fanger noget" = Intet bliver highlighted
Avatar billede erikjacobsen Ekspert
14. januar 2004 - 10:59 #5
Den var jo også utestet ;) Prøv så

$file = preg_replace("/<\?php(.*?)\?>/se", "'<p>' . highlight_string('\\0', true) . '</p>'", $file);
Avatar billede jensgram Nybegynder
14. januar 2004 - 11:14 #6
Erik > Så virker det perfekt...

Ifølge manualen gør /e, at det bliver tolket som PHP. men hvad gør så /se?
Avatar billede jensgram Nybegynder
14. januar 2004 - 11:17 #7
Og så lige 3 ting mere, når jeg har dig ;)

Hvis du gider, hvordan laves følgende så om fra ereg til preg?

1) "<p id=\"kategori\">([^<]*)</p>"
2) "<p id=\"synopsis\">([^<]*)</p>"
3) "<h1>([^<]*)</h1>"

Er det bare:

1) "/<p id=\"kategori\">([^<]*)</p>/"
2) "/<p id=\"synopsis\">([^<]*)</p>/"
3) "/<h1>([^<]*)</h1>/"

?
Avatar billede erikjacobsen Ekspert
14. januar 2004 - 11:17 #8
Et "." matcher et vilkårligt tegn, dog ikke linieskift. /s betyder så blot
at den også matcher linieskift. Hvis al din PHP står på een linie, behøver du ikke /s

  <?php .... ?>

men... næppe realistisk. Ingen point, tak - samler ikke på det.
Avatar billede erikjacobsen Ekspert
14. januar 2004 - 11:18 #9
Utestet:

1) '/<p id="kategori">([^<]*)<\/p>/'
2) '/<p id="synopsis">([^<]*)<\/p>/'
3) '/<h1>([^<]*)<\/h1>/'
Avatar billede jensgram Nybegynder
14. januar 2004 - 12:53 #10
Tak for gennemgangen. Det var jo lærerigt.

Ved godt hvordan du har det med point, så jeg lukker selv. Og tester dine forslag...

Tak for hjælpen.

- Jens Gram
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