Avatar billede a2p-dk Nybegynder
17. november 2010 - 17:58 Der er 2 kommentarer og
1 løsning

preg_replace: highlight css: html,body {margin:0;}

Hej.

Jeg er igang med at se på preg_replace. og har taget udfordringen op om at lave en css highlight funktion.

lige nu er jeg kun kommet til

$s = preg_replace( '/(.*?)\{(.*?)\}/i' , '<selectors>\1</selectors>{<syntax>\2</syntax>}' , $s );


hvor den putter henholdsvis body,html,div,h1,h2 i en kasse <selectors> kasse, og {margin:0;padding:0;} puttes i en <syntax> boks.

Nu er mit problem bare at linjen godt kan se sådan ud:

html, body {margin:0;padding:10px;}

som så bliver til

<selectors>html, body </selectors>{<syntax>margin:0;padding:10px;</syntax>}


jeg vil gerne gå ind med preg_replace og putte html og body i nye bokse (<selector>) så resultatet kommer til at se sådan ud:


<selectors><selector>html</selector>,<selector> body </selector></selectors>{<syntax>margin:0;padding:10px;</syntax>}


Jeg har bare ingen ide om hvordan man går ind og tager fat i <selectors>...</selectors> og derfra videre ind, uden at splitte stringen op i en array og derfra gå ind.

På forhånd tak for hjælpen.
Avatar billede a2p-dk Nybegynder
17. november 2010 - 18:19 #1
okay.. istedet for at bruge preg_replace kan jeg bruge preg_replace_callback

se mere:
http://php.net/manual/en/function.preg-replace-callback.php
Avatar billede a2p-dk Nybegynder
18. november 2010 - 01:15 #2
og så bare lige for at vise mig frem:



function highlightCSS($s) {
   
    $secret = md5(rand()*rand()*rand()*rand()*time());
   
    // <hidden> = /* ... */
    // <selectors> = html, body, .class, ... ALL TOGETHER
    // <selector> = html OR body OR .class OR ... EACH ONE OF THEM
    // <syntax> = {margin:0; padding:10px; ...}
    // <rule> = margin:0;, padding:10px;, ...
    // <option> = margin, padding, ...
    // <value> = 0, 10px, ...
   
    // create selectors & syntax
    $s = preg_replace( '/(.*?)\{(.*?)\}/i' , '<selectors-' .$secret. '>\1</selectors-' .$secret. '>{<syntax-' .$secret. '>\2</syntax-' .$secret. '>}' , $s );
    $s = str_replace( '/*' , '<span class="hidden">/*' , $s );
    $s = str_replace( '*/' , '*/</span>' , $s );
   
    // selectors
    $s = preg_replace_callback( '/<selectors-' .$secret. '>(.*?)<\/selectors-' .$secret. '>/i' , create_function('$matches' , 'return parent2child( $matches , "selectors-' .$secret. '" , "selector-' .$secret. '" , ",");') , $s );
    $s = preg_replace( '/<selector-' .$secret. '>(.*?)<\/selector-' .$secret. '>/i' , '<span class="selector">\1</span>' , $s );
   
    //syntax
    $s = preg_replace_callback( '/<syntax-' .$secret. '>(.*?)<\/syntax-' .$secret. '>/i' , create_function( '$matches' , 'return parent2child( $matches , "syntax-' .$secret. '" , "rule-' .$secret. '" , ";");' ) , $s );
    $s = preg_replace( '/<rule-' .$secret. '>(.*?):(.*?)<\/rule-' .$secret. '>/i' , '<option-' .$secret. '>\1</option-' .$secret. '>:<value-' .$secret. '>\2</value-' .$secret. '>' , $s );
    $s = preg_replace( '/<option-' .$secret. '>(.*?)<\/option-' .$secret. '>/i' , '<span class="option">\1</span>' , $s );
    $s = preg_replace( '/<value-' .$secret. '>(.*?)<\/value-' .$secret. '>/i' , '<span class="value">\1</span>' , $s );
   
    return $s;
}



med indput

body, input, textarea, select, button, table{font-family:Arial,sans-serif; font-size:12px; color:#444444;}


bliver til:

<span class="selector">body</span>, <span class="selector">input</span>, <span class="selector">textarea</span>, <span class="selector">select</span>, <span class="selector">button</span>, <span class="selector">table</span>{<span class="option">font-family</span>:<span class="value">Arial,sans-serif</span>; <span class="option">font-size</span>:<span class="value">12px</span>; <span class="option">color</span>:<span class="value">#444444</span>}
Avatar billede a2p-dk Nybegynder
18. november 2010 - 22:23 #3
,
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