Visualizzazione risultati 1 fino 6 di 6

Discussione: espressioni regolari

  1. #1
    Guest

    Predefinito espressioni regolari

    ho quasi completato il mio template engine per i miei siti...
    ho un problema con questa riga

    Codice PHP:
    $template_complete = preg_replace("<!-- SPLIT.".$key." -->(.*?)<!-- ENDSPLIT.".$key." -->", $return_php, $template_complete);
    $template_complete è il risultato finale di tutto il template elaborato da mandare a video con print
    $key = è una chiave che utilizzo per gestire più split in uno stesso template
    $return_php è il codice che ho prelevato dal template che ho precedentemente elaborato... (cicli di query)

    e deve fare questa semplice operazione...
    deve prendere tutto il testo che è compreso tra <!-- SPLIT.".$key." --> e <!-- ENDSPLIT.".$key." --> e sostituirlo con il codice che ho elaborato in precedenza... memorizzarlo in una variabile e basta...

    ho fatto alcune prove, ma l'errore che mi ha bloccato lo sviluppo è:

    Codice:
    Warning: preg_replace(): Unknown modifier '(' in d:\www\class_template.php on line 65
    credo che non gli vada giù il (.*?) ma non capisco il perchè e come poterlo risolvere...

  2. #2
    Guest

    Predefinito

    Non ho letto tutto il messaggio, ma mi sono accorto che non hai backslashato i punti (.)
    Poi non hai messo enssun carattere di inizio e fine nel primo argomento del preg_replace.
    Inoltre non hai specificato quante volte devono essere presenti <!-- SPLIT.".$key." --> e <!-- ENDSPLIT.".$key." --> nella stringa.
    Insomma ci sono un bel po' di errori.


    Ciaooooo!!!!!!

  3. #3
    Guest

    Predefinito

    in che senso quante volte devono essere presenti?

  4. #4
    L'avatar di webscript
    webscript non è connesso Utente attivo
    Data registrazione
    28-11-2004
    Messaggi
    320

    Predefinito

    Citazione Originalmente inviato da neoscript
    credo che non gli vada giù il (.*?) ma non capisco il perchè e come poterlo risolvere...
    Precisamente!

    allora gli errori sono 2

    (per il terzo mi pare che per il preg non servano i delimitatori... ma non ne sono certo...)

    il primo è che bisogna usare la funzione di escape sui caratteri speciali...

    Quindi . --> \.

    il secondo errore è (.*?).
    sia *, che ? indicano quante volte fare . (inteso come carattere speciale)....

    ma due caratteri che indicano quante volte fare non ha senso, e in più da un errore... o .* oppure .?!

    Per quello che nelle altre sottostringhe bisogna indicare quante volte farlo... non necessariamente, se non c'è alcuna indicazione significa semplicemente farlo una volta...

    Così sia!

    $template_complete = eregi_replace("^(.*)(<!-- SPLIT\.".$key." -->)(.*)(<!-- ENDSPLIT\.".$key." -->)(.*)$", "\\1".$return_php."\\5", $template);

    P.S. Le tre sottostringhe centrali possono essere unite... ma a me pare più chiaro così
    WS

  5. #5
    Guest

    Predefinito

    webscript, stiamo parlando di preg non di ereg!!
    La sintassi è "leggermente" diversa!
    I delimitatori ci vanno, ma non c'entrano nulla con i delimitatori di inizio/fine delle ereg.
    In più la dichiarazione (.*?) sta ad indicare che il conteggio dei caratteri deve partire dal massimo e non dal minimo.


    Ciaoo!!!

  6. #6
    L'avatar di webscript
    webscript non è connesso Utente attivo
    Data registrazione
    28-11-2004
    Messaggi
    320

    Predefinito

    allora:p grazie debug che mi hai fatto incuriosire e cercare... io non ho mai usato la funzione preg_replace... e quindi non mi sono mai interessato... ora ho curiosato e ho visto cosa intendi come delimitatoei (/ e /)

    quello del (.*?) non lo sapevo:p
    per l'ereg l'ho messo come alternativa alla soluzione...

    WS

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •