Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22

Discussione: BBCode

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127

    BBCode

    funzione BBCode..

    codice:
    Sub Page_Load
    Response.Write(Formatta("[z][z]prova[/z] ma non va..[/z]"))
    End Sub
    '**********************************
    'BBCode
    Function Formatta(testo as string)
    testo = Replace(testo, Chr(10), "
    ")
    testo = System.Text.RegularExpressions.Regex.Replace(testo, "\[z\](.*?)\[\/z\]", "$1")
    Return testo
    End Function
    '***********************************
    il tag [z] corrisponde al grassetto
    allora c'è un "concatenamento" di [z] ke fa un po' skifo, ma ke cmq potrebbe avvenire..
    il codice di sopra, ke fa utilizzo di regular expression, traduce in questo il modo il codice:
    [z]prova ma non va..[/z]
    al posto ke
    prova ma non va..

    cioè se ci sono + tag [z] aperti confonde la kiusura del primo con quella del secondo e poi dei restanti due se ne frega altamente

    errore nella regex?
    tnx

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127
    ecco ..
    togliendo da
    testo = System.Text.RegularExpressions.Regex.Replace(testo , "\[z\](.*?)\[\/z\]", "$1")
    il punto di domanda
    cioè
    testo = System.Text.RegularExpressions.Regex.Replace(testo , "\[z\](.*)\[\/z\]", "$1")

    va un po' meglio
    ora fa ..
    [z]prova[/z] ma non va..

    ma cmq nn cambia i [z][/z] interni

  3. #3
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    codice:
    ..Regex.Replace(testo, "\[z\]\[/z\]", "")
    Voglio l'alt+s anche per FF

  4. #4
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    non so se è il metodo + veloce cmq
    sono tornato al primo caso che era corretto ma si fermava alla prima ricorrenza quindi ho aggiunto la ricorsivita sul replace

    ho aggiunto 2 parametri per rendere riutilizzabile il codice da rimpiazzare al massimo levali se non ti servono
    codice:
    <script language="vb" runat="server">
    Sub Page_Load
    Dim stringaTest as string
    stringaTest = "proviamo a [z][z][z]mettere sotto [z]stress[/z]il test[/z], " & _ 
    	   		  "se funziona il continuo [/z][/z][z][z]annidamento[/z] di grassetti..[/z], e altre sezioni [z]ben formattate[/z]"
    Response.Write(Formatta(stringaTest,"z","b"))
    End Sub
    Function Formatta(testo as string,virtualTag as string,htmlTag as String)
    	Dim PatternTag as string = "\[" & virtualTag & "\](.*?)\[\/" & virtualTag & "\]" '"\[z\](.*?)\[\/z\]" 	
    	Dim ReplaceTag as string = "<" & htmlTag & ">$1</" & htmlTag & ">" '"$1" 
    	testo = Replace(testo, Chr(10), "
    ")
    	Dim objRegExp As New System.Text.RegularExpressions.Regex(PatternTag)
    	while objRegExp.IsMatch(testo)
    		testo =  objRegExp.Replace(testo,ReplaceTag)
    	end while
    	return testo
    End Function
    </script>
    output
    proviamo a mettere sotto stress il test, se funziona il continuo annidamento di grassetti.. , e altre sezioni ben formattate

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127
    grazie ..
    funziona xfettamente..

    anke se io preferirei un modo x evitare il ciclo while, magari con qualcosa da aggiungere nella regex ..
    se fosse possibile, altrimenti questa soluzione va cmq benissimo..

  6. #6
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    si sto cercando anch'io su regexp.org come annidare i pattern per ora senza risultato

  7. #7
    Usare un semplice Replace può andare oppure devi sostuire anche url, immagini..?

    Function Formatta(testo as string, virtualTag as string, htmlTag as String)
    testo = testo.Replace("[" & virtualTag & "]", "<" & htmlTag & ">");
    return testo
    End Function

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127
    Originariamente inviato da kluster
    si sto cercando anch'io su regexp.org come annidare i pattern per ora senza risultato
    grazzzzie!

    Usare un semplice Replace può andare oppure devi sostuire anche url, immagini..?

    Function Formatta(testo as string, virtualTag as string, htmlTag as String)
    testo = testo.Replace("[" & virtualTag & "]", "<" & htmlTag & ">");
    return testo
    End Function
    io uso le regex x essere sicuro ke ad un tag di apertura ne segua uno di kiusura

  9. #9
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    niente penso che alla fine la + performante è la semplificazione di ZofM , se l'utente ha sbagliato a chiudere i tag alla fine non è che puoi diventare matto, no?

  10. #10
    Originariamente inviato da sms
    grazzzzie!


    io uso le regex x essere sicuro ke ad un tag di apertura ne segua uno di kiusura
    Sono d'accordissimo ma fare un controllo di questo tipo implica l'utilizzo del motore delle Regex ed ovviamente con conseguente perdita di performance in caso di molte richieste.
    Come ha detto kluster secondo me alla fine non è un gran problema anche se i tag non vengono chiusi correttamente no?

    Sto forum come fa?
    Vediamo:

    bold ribold bold
    testotestotesto


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 © 2026 vBulletin Solutions, Inc. All rights reserved.