Ammetto che le espressioni regolari non sono facilissime, ma con un po' più di ragionamento, si capiscono bene. Analizziamo l'espressione:
"\b\<()?\>"
- \b : indica l'inizio di una parola. Dato che stai cercando stringhe delimitate da parentesi angolari, non puoi utilizzare \b. Questo perchè una parola è formata solo da lettere normali o accentate, e non caratteri speciali come questi.
- \< : inidica un "<". Niente da dire.
- () : le parentesi sono struttura di raggruppamento. Quindi perchè usarle se non devi raggruppare niente? Infatti dentro non c'è alcun testo. Come puoi vedere dalla lista dal capitolo C3, se devi rappresentare un qualsiasi carattere puoi usare ".", o \w se si tratta solo di lettere.
- ? : il quantificatore ? è usato per indicare 0 o 1 ripetizioni. Quindi staresti cercando tutte le stringhe delimitate da parentesi angolari che contengano al massimo un carattere... E non mi sembra proprio che tu voglia fare così. Per indircare un qualsiasi numero di ripetizioni, si usa il quantificatore "*", oppure "+" se vuoi che ce ne sia almeno una.
- \> : indica un ">". Niente da dire.
In conclusione, quello che volevi scrivere è:
"\<.*\>"
Ossia: qualsiasi numero di caratteri (tranne a capo) delimitati da due parentesi angolari.
Inoltre, poichè ti serve il contenuto delle parentesi, puoi utilizzare il costruttore di raggruppamento che assegna nomi alle espressioni:
"\<(?<Contenuto>.*)\>"
Codice sorgente - presumibilmente VB.NET |
Dim logb As String Dim log() As String Dim perlog As String logb = File. OpenText(OpenFileDialog1. FileName). ReadToEnd()log = logb.Split(vbCrLf) Dim reg As Regex = New Regex("\<(?<Contenuto>.*)\>") Dim Matches As MatchCollection = reg.Matches(log(0)) For Each M As Match In Matches 'Come si vede chiaramente dall'esempio in C4, 'per ottenere il valore di un Match, si usa la 'proprietà Value MsgBox(M.Value.ToString) Next
|
Questi messagebox ti faranno vedere le occorrenze catturate, ma anche con le parentesi. Ossia nella stringa:
"<ciao> <uno>"
Visualizzeranno: "<ciao>" e "<uno>".
Per far visualizzare solo il contenuto, si usa la proprietà group:
Codice sorgente - presumibilmente Plain Text |
MsgBox(M.Groups("Contenuto").Value)
|
E visualizzerà: "ciao" e "uno".
Ultima modifica effettuata da Il Totem il 28/07/2008 alle 11:23