n° 219
Novembre 2017
Giugno 22, 2018, 01:36:18 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: [Regex] - Isolare un singolo token  (Letto 4858 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
DEV-01
Full Member
***

Karma: +11/-23
Scollegato Scollegato

Messaggi: 472

Me.Shift ^(n)


Mostra profilo E-mail
« inserita:: Marzo 28, 2013, 06:44:33 »

Buongiorno,

innanzitutto spero di aver "centrato" sezione...

Come da oggetto dovrei fare in modo da isolare una parola per implementare un sorta di syntax-highlighting.

Con il lavoro "più o meno svolto" finora riesco ad identificare le keyword da me specificate e che fanno parte di una serie di token la cui interpretazione per alcuni versi mi esemplifica l'interazione con l'SQL.

Il problema è che queste vengono colorate anche quando siano contenute in altre parole o quando sia in atto una regola di colorazione per un commento o per caratteri posti all'interno di delimitatori che identifichino una stringa.

Qualcuno è così generoso da aiutarmi?

Grazie
Registrato

01000100 01100101 01110110 00101101 00110000 00110001
MatrixTeo
Jr. Member
**

Karma: +1/-0
Scollegato Scollegato

Messaggi: 68



Mostra profilo WWW
« Risposta #1 inserita:: Marzo 29, 2013, 07:02:14 »

Ciao, magari posta qualche pattern per farci un'idea Sorriso

Questo può essere utile, ti permette di dire "(non) preceduto da", "(non) seguito da".
Cerca anche materiale riguardo le regex "greedy", può tornare utile Occhiolino
Registrato
DEV-01
Full Member
***

Karma: +11/-23
Scollegato Scollegato

Messaggi: 472

Me.Shift ^(n)


Mostra profilo E-mail
« Risposta #2 inserita:: Marzo 29, 2013, 08:22:27 »

Ciao, grazie per l'interesse.

La regex da me utilizzata:
Codice:
\b\s*(uno|due|tre|quattro|cinque)\s\b/gi

\b\s*(at|in)\s\b/gi

In pratica con la \s dovrebbe garantire uno spazio prima e dopo la parola.
Nel mio caso se alla seconda "grammatica" è associato un colore differente, le parole ivi contenute si colorano come specificato dalla relativa associazione.
 
Registrato

01000100 01100101 01110110 00101101 00110000 00110001
DEV-01
Full Member
***

Karma: +11/-23
Scollegato Scollegato

Messaggi: 472

Me.Shift ^(n)


Mostra profilo E-mail
« Risposta #3 inserita:: Marzo 29, 2013, 09:11:20 »

Pare abbia parzialmente risolto inserendo il token seguito da spazio.
A questo punto la parola viene identificata correttamente e solo per intero in tutti i casi (a capo|spazio|primo carattere di riga).

In merito permane il seguente problema:
se il token viene inserito alla fine di una stringa viene riconosciuto lo stesso.
Es:

Codice:
User -> riconosciuto (colorato)
Username -> non riconosciuto (non colorato)
Myuser -> riconoscuto (viene colorato solo user)

Purtroppo inserendo uno spazio anche prima del token l'IDE mi da un errore di conversione.
Dovrei fare in modo di definire il pattern scrivendo qualcosa del genere:

Codice:
((""""|"" ""|"'") & keyword & "(""""|","|"'" ""))|"

Ovvero se prima non c'è niente o se c'è uno spazio o un apice e
se  dopo c'è una virgola, uno spazio o un apice
provando ad utilizzare una metodologia poco prolissa per risparmaire spazio in memoria anche in fase di ricerca.

Il fatto è che utilizzando questa soluzione, il match errato avviene lo stesso poichè tutte le soluzioni sono presenti.

Inoltre alcuni token (e solo alcuni) vengono colorati col colore standard indipendentemente dal matching...

Sono ancora agli inizi con le regex e gradirei moltissimo tutto l'aiuto possibile.
Registrato

01000100 01100101 01110110 00101101 00110000 00110001
Roberto Allegra
Global Moderator
Hero Member
*****

Karma: +50/-1
Scollegato Scollegato

Messaggi: 2103



Mostra profilo WWW
« Risposta #4 inserita:: Marzo 29, 2013, 10:46:33 »

Che dialetto di regex stai usando (Javascript, Perl, PHP/Posix...)? In che linguaggio è scritto il tuo IDE?
 
PS: Tieni presente che se cominci ad avere a che fare con commenti, stringhe, eccetera, forse è il caso di pensare ad un (micro)parser, più che alle regex.
Registrato

I moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.
DEV-01
Full Member
***

Karma: +11/-23
Scollegato Scollegato

Messaggi: 472

Me.Shift ^(n)


Mostra profilo E-mail
« Risposta #5 inserita:: Marzo 30, 2013, 06:58:00 »

Ciao Roberto e grazie per l'interesse.

Utilizzo Visual Studio 2008/2010 pro.

Effettivamente io sto scrivendo anche il micro-parser che controllerà la correttezza della semantica e l' indice delle parole all'interno della stringa estrapolando i parametri relativi alle associazioni con le keywords e le particolari formattazioni come ad esempio i doppi apici delimitatori di stringa, i commenti, etc.

Il problema da me posto nasce dal fatto che dovrò esporre anche nomi di database, tabelle e campi oltre ai parametri per utili al mio micro-"script/language" (o meglio: "serie di marcatori che descrivono i parametri inseriti") e non posso presentarle in "multicolor".  Sorriso

In pratica all'interno di una stringa inclusa tra doppi apici, ad esempio, quelle di cui appena sopra devono essere le uniche parole a comparire nel colore specifico associatogli ma, considerando il passaggio di parametri postumo direttamente all'engine di database potrei persino fare a meno del controllo sui doppi apici nella parte relativa l'SQL.

Invece adesso se scrivo la keyword seguente fra apici:

'user' me lo colora di rosso e va bene, mentre se scrivo la keyword 'password' inclusa nella stessa regola della keyword precedente, questa viene colorata in blu (il colore, appunto scelto per le keywords).

A livello di parser, però, anche se grossolanamente (almeno nei concetti di base) posso identificare tranquillamente la differenza.

Può darsi però che a causa della mia inesperienza in merito io non abbia capito il tuo concetto e mi ostini a considerare la grammatica da elaborare lato parser una cosa a parte in relazione alla colorazione all'atto della digitazione.

In tal senso, ti chiedo un'aiuto più approfondito (che si estende anche a chiunque altro voglia ritenersi disponibile).
Non credevo fosse tanto complicato implementare il syntax highlighting.

Registrato

01000100 01100101 01110110 00101101 00110000 00110001
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines