Domanda

Voglio scrivere una regex per tirare fuori tutti i valori delle variabili ed i loro nomi dalla dichiarazione dichiarazione delle variabili. Dire che ho

int i, k = 10, l = 0

voglio scrivere un qualcosa di regex come int \ s ^ ,? | (^ ,?) * ma questo sarà anche accettare k = 10 cioè (senza int precede) Fondamentalmente idea è Se stringa inizia con int allora ottenere l'elenco delle variabili separato da,

che conosco per estrarre i valori csv, ma qui la mia stringa ha un certo valore iniziale. Come posso risolverlo?

È stato utile?

Soluzione

Inizia a pensare alla struttura di una definizione, per esempio,

(a line can start with some spaces) followed by,

(Type) followed by

(at least one space)
(variable_1)
(optionally
   (comma // next var
    |
    '='number // initialization
    ) ...`

quindi provare a convertire ogni gruppo:

^      \s*    \w+           \s+        \w+         ?          (','    |  '=' \d+   ) ...
line  some    type          at least  var          optionally   more  or init some
start spaces  (some chars)  one space (some chars)              vars     val  digits

A sinistra come compito a casa per rimuovere gli spazi e sistemare la regex finale.

Altri suggerimenti

Ecco alcune informazioni utili che è possibile utilizzare

http://compsci.ca/v3/viewtopic.php?t=6712

Si potrebbe costruire la vostra espressione regolare dalla [C # Grammar] ( http://msdn.microsoft.com/en-us/library/aa664812 (VS.71) aspx) . Ma costruire un parser sarebbe certamente migliore.

Prova questo:

 ^(int|[sS]tring)\s+\w+\s*(=\s*[^,]+)?(,\s*\w+\s*(=\s*[^,]+)?)*$

Sarà abbinare il vostro codice di esempio

int i,k = 10,l=0

E facendo qualche ipotesi circa la lingua che si può o non si sta utilizzando, sarà anche partner:

int i, j, k=10, l=0
string i=23, j, k=10, l=0
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top