Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Implementare TAG CODE

  1. #1

    Implementare TAG CODE

    Dovrei implementare dei tag CODE.
    Il codice compreso tra tag CODE viene passato ad una funzione, che ne restituisce il codice "colorato" tra tag pre.
    Solo che ho dei problemi con la regex.
    In pratica se scrivo (senza spazi tra [ e code):
    codice:
    Spiegazione ...
    
    [ code=Linguaggio ]
    
    //Codice ...
    
    [ /code ]
    
    Spiegazione ...
    Funziona. Mi ritorna:
    <pre>//Codice Colorato ...</pre>

    Ma se scrivo:
    codice:
    Spiegazione ...
    
    [ code=Linguaggio ]
    
    //Codice ...
    
    [ /code ]
    
    Spiegazione ...
    
    [ code=Linguaggio ]
    
    //Codice ...
    
    [ /code ]
    Non funziona e mi ritorna:
    codice:
    Spiegazione ...
    
    <pre>
    
    //Codice ...
    
    [ /code ]
    
    Spiegazione ...
    
    [ code=Linguaggio ]
    
    //Codice ...
    
    </pre>
    Invece di:
    codice:
    Spiegazione ...
    
    <pre>
    
    //Codice ...
    
    </pre>
    
    Spiegazione ...
    
    <pre>
    
    //Codice ...
    
    </pre>
    La regex in questione, è:
    Codice PHP:
    $text preg_replace("/\[code\=(\w+)\](.+)\[\/code\]/em""highlightcode('$2', '$1')"$text); 
    Help please.

  2. #2
    Per iniziare non usare lo / come delimitatore. In questo modo eviti di dover fare più escaping del necesario.

    Poi potresti provare con un'espressione tipo:

    $text = preg_replace("#\[\s*code\s*=\s*(w+)\s*](.*?)\[\s*/\s*code\s*\]#siem", "highlightcode('$2', '$1')", $text);
    In questo modo eventuali spazi all'interno dei tag bbCode saranno "ignorati".

  3. #3
    Ok così ignora gli spazi, ma non era proprio il mio problema
    IL fatto è che lui non sostituisce per ogni tag CODE un tag pre e per ogni tag /CODE un tag </pre>, ma sostituisce il primo TAG CODE con pre e l'ultimo con /pre, se ci sono tag in mezzo vengono ingnorati.
    Come fatto vedere nel mio esempio

  4. #4
    Originariamente inviato da menphisx
    Ok così ignora gli spazi, ma non era proprio il mio problema
    IL fatto è che lui non sostituisce per ogni tag CODE un tag pre e per ogni tag /CODE un tag </pre>, ma sostituisce il primo TAG CODE con pre e l'ultimo con /pre, se ci sono tag in mezzo vengono ingnorati.
    Come fatto vedere nel mio esempio
    Hai provato il codice esattamente come l'ho indicato?

    In teoria NON dovrebbe accadere visto che l'espressione è stata resa non-greedy dal ?

  5. #5
    L'ho provata esattamente come l'hai postata, e non sostituisce neanche un tag.


  6. #6
    RISOLTO !
    Ho risolto con questa regex:
    codice:
    $text = preg_replace("#\[code\=(\w+)\](.+?)\[/code\]#ei", "highlightcode('$2', '$1')", $text);
    Adesso aggiungo anche il supporto agli spazi, grazie

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.