[PHP] Regex voor if-structuur

Pagina: 1
Acties:

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Hoi!

Ten einde raad wend ik me tot jullie ;) Ik ben bezig met een eigen template systeempje (wat eindelijk goed werkt), maar nu wil ik daar ook IF-THEN-ELSE in kunnen verwerken.

Voor het parsen van dat stuk heb ik de volgende funktie gemaakt :
PHP:
1
<?        function parseConditions($output)        {              preg_match_all("/{if ([^}]*)}(.*){\/if}/ise", $output, $regs, PREG_SET_ORDER);                while (list ($statement, $args) = each($regs))                {                        $args[1] = str_replace("user.", '$_SESSION[SESSION_VARS . "user"]->', $args[1]);                        $statement = "return ($args[1]) ? true : false;";                        $statement_output = (eval($statement)) ? $args[2] : "";                        $this->add("debug", "IF STATEMENT : $args[1]<BR>");                        $this->add("debug", "IF STATEMENT : $statement_output<BR>");                        $this->add("debug", "STATEMENT : $statement<BR>");                        $this->add("debug", "EVAL'D : " . eval($statement) . "<BR>");                        $output = str_replace($args[0], $statement_output, $output);                }                return $output;        }?>

Dat werkt dus naar behoren voor simpele gevallen als :

test.tpl
code:
1
2
3
4
5
6
7
blaat

{if user.logged_in}
Ingelogd
{/if}

blaat

Alleen zet ik nu twee van die IF statements onder elkaar, dan pakt die (natuurlijk) alleen het stuk tussen de eerste {if.. en de laatste {/if}. Dat wil ik dus niet.

Het volgende dus wel
code:
1
{if <expressie>} Doe iets {else} doe iets anders {/if}

Wie kan mij helpen (of in de goede richting duwen), want ik wordt er echt gek van

SIZE does matter.
"You're go at throttle up!"


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Voor jouw geschetste probleem is er de greediness modifier (/U of ? achter de * zetten).

Echter zul je dan als volgende probleem de geneste structuren tegenkomen.
Als je die niet gebruikt boeit het verder allemaal niet zo :) en moet je gewoon /U erachter plakken in je regexp.

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Kijk, daar zou ik nou zelf nooit naar gaan zoeken "greediness", hoe verzin je het ;)

Maar het lijkt wel te werken, in ieder geval. Thnx!

SIZE does matter.
"You're go at throttle up!"