[PHP] Regexp modifier 'e' geeft problemen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Repsaj_Nav
  • Registratie: Juni 2006
  • Laatst online: 15-09 14:54

Repsaj_Nav

Hallo, ik ben Jasper

Topicstarter
Voor een website die ik aan het maken ben, ben ik bezig met bbcode en code highlighters.

Ik gebruik hier als voorbeeld even de CSS highlighter.
Alles tussen [css] en [/css] moet door de functie css($string) worden gegooid.

Dat doe ik tot nu toe zo:
PHP:
1
2
3
4
5
6
    $css=preg_split("#\[css\](.*?)\[\/css\]#msi", $parse, -1, PREG_SPLIT_DELIM_CAPTURE);
    
    for($i=1; $i<count($css)-1; $i=$i+2) {
        $css[$i]=css($css[$i]);
    }
    $parse=implode("", $css);

Hier kwam ik toen de modifier 'e' tegen, en dat leek me ideaal, dus ik ging het zo proberen:
PHP:
1
$parse=preg_replace("#\[css\](.*?)\[\/css\]#msie", css("\\1"), $parse);


Ik krijg dan deze error:
Parse error: syntax error, unexpected '<' in /home/WEGGEHAALD/functions.parse.php(103) : regexp code on line 1

Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: <pre class="code css"><code>#container { width: 800px; margin: 0 auto; }</code></pre> in /home/WEGGEHAALD/functions.parse.php on line 103
Klopt mijn "korte" code niet, of moet ik het met preg_split doen?

Alvast bedankt!


Mijn functie css($string):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function css($css) {
    // we gebruiken @ als #
    $css=html_entity_decode($css);
    $css=str_replace("\n", "", $css);
    $css=preg_replace("@[\"]{1}(.*?)[\"]{1}@msi", "<span class=\"css-quote\">\"\\1\"</span>", $css);
    $css=preg_replace("@[\']{1}(.*?)[\']{1}@msi", "<span class=\"css-quote\">'\\1'</span>", $css);
    $css=preg_replace("@(\/\*.*?\*\/)@msi", "<span class=\"commentaar\">\\1</span>", $css);
    $css=preg_replace("@([#\.]?[a-z]*)[\s]*\{@msi", "<span class=\"css-selector\">\\1</span> {", $css);
    $css=preg_replace("@[\s]*([a-z\-]*)[\s]*:[\s]*(.*?)[;]+[\s]*@msi", "\n\t<span class=\"css-key\">\\1</span>: <span class=\"css-value\">\\2</span>;\t", $css);
    $css=preg_replace("@[\s]*\}@msi", "\n}", $css);
    $css=str_replace("!important", "<span class=\"css-important\">!important</span>", $css);
    return "<pre class=\"code css\"><code>".$css."</code></pre>";
}

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Je zou het dan zo moeten doen:
PHP:
1
$parse=preg_replace("#\[css\](.*?)\[\/css\]#sie", 'css("\\1")', $parse);

(m-modifier heeft hier geen nut)

Maar nog mooier is preg_replace_callback gebruiken, dan zit je ook niet met het probleem van escaped quotes.

Intentionally left blank