Newsgroup: it.comp.www.asp
Titolo: Quell'Oscuro universo chiamato RegExp

Vorrei integrare in un forum in cui ho disabilitato l'html il bbcode in
modo che ad esempio la stringa [b] equivale all'apertura del bold.
Il problema poi č il cerca e sostituisci. Ho pensato di imbarcarmi nelle
RegExp, anche se su internet la documentazione č piů che scarsa, e ho
prodotto questo pat: (per il bold) "\[b\](.+)\[\/b\]"
Il problema č che in una stringa cosě composta "[b]test[/b],
[b]test2[/b]" la Reg si va a prendere il primo [b] e l'ultimo [/b]
trascurando quelli
intermedi.
Quindi dovrei aggiungere un "?" e dovrebbe diventare
"\[b\](.+?)\[\/b\]"
Ma questa mi restituisce l'errore "Quantificatore imprevisto"
Soluzione? ;)

 "\[b\](.+?)\[\/b\]"
Beh, no...a parte la sintassi, se cerchi di espandere la ricerca "al
massimo" prenderai poi il primo e l'ultimo b...e se in mezzo ci sono parole
NON racchiuse?
Non so come aiutarti perché regexp su vbscript non le ho mai viste, ma ci
sarà sicuramente un "global" per dire di sostituire tutte le occorrenze e
non solo la prima; quindi andava bene la tua sintassi iniziale con il flag
"global" impostato.
in jscript si scriverebbe /regexp/g (g=global)
per vbscript posso solo copiaincollarti l'esempio che trovi nella guida di
Microsoft (che, consiglio, faresti bene a scaricarti), che riporta comunque
esplicitamente come settare il global (e il case sensitive, magari ti
serve):
Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' Create variable.
   Set regEx = New RegExp   ' Create a regular expression.
   regEx.Pattern = patrn   ' Set pattern.
   regEx.IgnoreCase = True   ' Set case insensitivity.
   regEx.Global = True   ' Set global applicability.
   Set Matches = regEx.Execute(strng)   ' Execute search.
   For Each Match in Matches   ' Iterate Matches collection.
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M. -- 

Massimo Nicosia wrote:

str = "[b]test[/b], [b]test2[/b]"
set re = new regexp
 re.pattern = "(\[)(/?b)(\])"
 re.global = true
 re.ignorecase = true
 str = re.replace(str,"<$2>")
set re = nothing
-- 
visuddhi { info at visuddhi dot com } { icq# 44339752 }
if it is to be, it is up to me { 
www.visuddhi.com
 }
absolutely free, VisuBox { 
www.visubox.com
 }
css layout builder { 
www.visuddhi.com/vstuff/l3cbuilder.asp
 }

 set re = nothing
Funziona perfettamente, grazie! Se non ti chiedo molto potresti spiegarmi il
funzionamento di questo pattern?

 spiegarmi il funzionamento di questo pattern?
str = "[b]test[/b], [b]test2[/b]"
set re = new regexp
re.pattern = "(\[)(/?b)(\])"
re.global = true
re.ignorecase = true
str = re.replace(str,"<$2>")
set re = nothing
\[
una occorrenza del carattere [
/?
zero o una occorrenza del carattere /
b
una occorrenza del carattere b
\[
una occorrenza del carattere ]
questo individua tutti i [b] o [/b]
devi ora sostituire [ con < e ] con > quindi per comodità raggruppo la
regexp in 3 sezioni
(1)(2)(3)    (\[)(/?b)(\])
la 1 deve diventare <
la 2 deve restare uguale
la 3 deve diventare >
dato che nel replace posso fare riferimento alle sezioni con $n dove n
è il numero della sezione...
<$1> vuol dire di sotituire quello che trova con < + il valore della
sezione 2  è + >
In questo modo ho perso i valori delle sezioni 1 e 3 ma ho aggiunto i
caratteri < e >
nella posizione della sezione 2 ho lasciato quello che la regexp ha
individuato b o /b
