Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Espressione regolare per if

    Ragazzi ammetto di non essere molto pratico di espressioni regolari, però sto sbattendo la testa dietro una espressione che mi deve permettere il parsing di un costrutto "if/elseif/else".

    Il costrutto è del tipo:
    Codice PHP:
    <if expr="...">
      
    // qualcosa
    <elseif expr="...">
      
    // qualche altra cosa
    <elseif expr="...">
      
    // qualche altra cosa ancora
    <else>
      
    // questo
    </if> 
    l'espressione, molto rozza, che ho scritto al momento è:
    Codice PHP:
    preg_match_all("#<if expr=\"(.*)\">(.*)(<elseif expr=\"(.*)\">(.*))*(<else>(.*))?</if>#siU"$text$matchesPREG_SET_ORDER); 
    che ovviamente non integra alcune cose ma al momento visto che non funziona come dovrebbe non mi interessano. Ecco il problema è che non mi becca tutti e due gli "elseif" ma solo il secondo.

    Il costrutto if può avere più "elseif" ma un solo "else", ovviamente può anche non averli proprio.

    Mi aiutate?
    Administrator of NAMDesign.Net

  2. #2
    Perchè non usi un template engine già pronto (es. bTemplate)?

    Per quanto riguarda il tuo problema specifico, IMHO sarebbe meglio non creare una espressione regolare per tutto il costrutto IF/THEN/ELSE etc. ma di creare un'espressione che "estragga" i soli tag, eventualmente con una callback oppure con PREG_OFFSET_CAPTURE.

    In questo modo è più facile da implementare ed anche più flessibile.

  3. #3
    Non uso un template engine già pronto perchè ne ho già uno mio e vorrei aggiungergli la gestione dell'IF.

    Riguardo il tuo suggerimento devo dire che è ottimo. Avendo gli offset dei vari tag del costrutto posso analizzare più semplicemete il tutto a pezzi.

    Controllo l'IF, se mi va bene prendo il suo codice altrimenti passo all'offset successivo; se è un else lo accetto e basta mentre se è un elseif ripeto la procedura.

    Per l'uso della callback che idea hai in mente precisamente?


    P.S. invece per come sistemare la regexp suggerimenti?
    Administrator of NAMDesign.Net

  4. #4
    Una cosa tipo questa (non l'ho testata):

    Codice PHP:
    $pattern '#<(if|elseif|else|/if)(\\s+expr="([^"]*)"\\s*)?\\>#si'

  5. #5
    Ottimo sembra andare. Ora ci devo solo costruire la gestione intorno.

    Una volta aggiunto questo per me il mio piccolo template engine ha tutto quello che serve: variabili, loop, if.
    Administrator of NAMDesign.Net

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.