Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Regex e SyntaxHighlight
Forum - C# / VB.NET - Regex e SyntaxHighlight

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 15:07
Domenica, 15/11/2009
Questo topic è stato chiuso dal moderatore

Buon gfirono a tutti...Sto creando un programma che mi permette di programmare in C/C++(è solo un piccolo Editor di Sorgenti, il compilatore è esterno) ma adeso ho un problema sto utilizzando la guida di Totem sulla SyntaxHighlight, ho preso qualche spunto qua e la ma ora vorrei sapere come posso utilizzare le Regex per colorare le parole chiavi cioè se ad esempio l'utente scrive '#include' il rpogramma deve colorarmi di blu(ad esempio) la stringa '#include' e quindi dovrei controllare se è stato scritto #include con le regex etc...come posso fare???:hail::k:

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:55
Domenica, 15/11/2009
Beh, la regex per #include è... "#include" :rotfl:
Se, invece, vuoi indicare "#include", ma seguito da almeno uno spazio è "#include\s+".
Oppure, se vuoi indicare "#include" seguito da almeno uno spazio e posto all'inizio della linea è "^#include\s+".
O ancora, "#include" seguito da almeno uno spazio e preceduto da zero o più spazi, ma che inizino dall'inizio della riga è: "^\s*#include\s+".

PM
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 16:56
Domenica, 15/11/2009
Testo quotato

Postato originariamente da Il Totem:

Beh, la regex per #include è... "#include" :rotfl:
Se, invece, vuoi indicare "#include", ma seguito da almeno uno spazio è "#include\s+".
Oppure, se vuoi indicare "#include" seguito da almeno uno spazio e posto all'inizio della linea è "^#include\s+".
O ancora, "#include" seguito da almeno uno spazio e preceduto da zero o più spazi, ma che inizino dall'inizio della riga è: "^\s*#include\s+".



ok però poi come faccio a digli che se trova '#include <libreria>' me la deve colorare di un colore?:k::hail:

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:05
Domenica, 15/11/2009
Funzione Matches: restituisce tutte le occorrenze della regex. C'è scritto nel capitolo sulle regex.

PM
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 19:19
Domenica, 15/11/2009
Grazie mille Totem ho fatto...Questo è il codice:
Codice sorgente - presumibilmente VB.NET

  1. Dim RegexBlue As New Regex("(#include|#define|etc.)")
  2.         Dim MatchsBlue As MatchCollection = RegexBlue.Matches(Me.Text)
  3.         For Each MBlue As Match In MatchsBlue
  4.             If MBlue.Success Then
  5.                 Me.SelectionStart = MBlue.Index
  6.                 Me.SelectionLength = MBlue.Length
  7.                 Me.SelectionColor = Color.Green
  8.                 Me.DeselectAll()
  9.             End If
  10.         Next



Ma adesso ho un'altro problema ad esempio se io voglio scrivere un commento nel mio codice(in c++) faccio così:
'/* commento */' e lui mi colora '/*' e '*/', fin qui tutto ok ma si presenta il problema che lui mi colora solo ed unicamente le '/*' '*/' e non il loro interno e cioè il commento qui mi rimane una cosa così:
/*(colorato di azzurro) commento(colorato in nero) */(colorato in azzurro), invece io vorrei che fosse tutto colorato di azzurro...
Domanda:
Come posso colorare tutto(cioè anche il commento)?:hail::hail::k:

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 13:19
Lunedì, 16/11/2009
Se hai fatto una regex del tipo "(/\*|\*/)" mi sembra ovvio che ti colori solo i delimitatori. Se vuoi comprendere tutto il commento farai "/\*[\w\W]+?\*/" o qualcosa di simile...

PM
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 22:28
Lunedì, 16/11/2009
Testo quotato

Postato originariamente da Il Totem:

Se hai fatto una regex del tipo "(/\*|\*/)" mi sembra ovvio che ti colori solo i delimitatori. Se vuoi comprendere tutto il commento farai "/\*[\w\W]+?\*/" o qualcosa di simile...



Ok...Grazie mille per tutto:k:;):love::k::asd:

PM
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 19:46
Martedì, 17/11/2009
Altro problema...:-|
Ho provato a leggere la tua(Totem) e un'altra guida (sulle regex) ma non sono riuscito a tirar fuori un bel niente...Comqune veniamo al problema...Quando apro o scrivo sulla richtextbox da me creata il font ad esempio della scritta verifica cambia ma non tutto cioè lui non dovrebbe proprio cambiare ma lui cambia perchè dentro c'è la parola chiave 'if' ma se io voglio cambiare font all'if solo se dopo di se c'è la parentesi tonda? ho già provato, ho tirato fuori qualcosa con questo: 'if\(' ma quando finisco di scrivere la parentesi tonda me la ingrandisce come l'if, invece io vorrei che solo l'if si ingrandisca...poi ad esempio se io scrivo:
Codice sorgente - presumibilmente Plain Text

  1. cout << "Ciao" << endl;


<< e << endl; me li colora di verde...come risolvo?
Poi un'altro problema:
se ad esempio io scrivo(una riga sotto):
Codice sorgente - presumibilmente Plain Text

  1. cout << "ciao" << endl;


Poi una riga sopra:
Codice sorgente - presumibilmente Plain Text

  1. cout << "en" << endl;


Tutto il codice sotto ed '<< endl;' me lo colora di rosso oppure alcune volte di verde..come risolvo?:hail::hail::hail::hail::hail::hail::hail::hail::k:

Edit:

Il primo problema(quello dell'if) l'ho risolto utilizzando prima dell'if l'escape(adesso non so come si chiama, Totem aiutami tu:D) \W cioè: '\Wif' :k:
Aiutatemi negli altri...:hail::hail::hail::k:

2° Edit:

Pure il secondo problema(quello della colorazione in verde del codice) l'ho risolto togliendo dal codice degli '#include' il:
Codice sorgente - presumibilmente Plain Text

  1. Me.Lines.Length


che non so neppure io a cosa servive:om::rotfl:...:k:

3° ed utlimo Edit(:D):
Risolto pure qst cercando su internet utilizzando qst codice sono riuscito :heehee::
Codice sorgente - presumibilmente Plain Text

  1. "(\""(.*?)(?=\"")"")"


:k::k::k:
E scusate il disturbo da parte mia:rotfl::k:

Ultima modifica effettuata da LittleHacker il 17/11/2009 alle 21:40
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:40
Mercoledì, 18/11/2009
Umh... vedo che stai combattendo con le regex. Fatti aiutare da Ruggy se lo trovi online. Posso chiudere ora?

PM
Pagine: [ 1 2 ] Precedente | Prossimo