Frage

Ich möchte ein RegEx schreiben, um die Variablenwerte alle und aus der Variablendeklarations Erklärung ihre Namen zu ziehen. Sprich ich habe

int i, k = 10, L = 0

Ich möchte einen regulären Ausdruck so etwas wie s int \ schreiben ^ ,? | (^ ,?) * aber dies wird auch akzeptieren k = 10 h (ohne int vorhergehenden it) Grundsätzlich Idee ist, Wenn Zeichenfolge beginnt mit int dann erhalten die Variablenliste getrennt durch,

Ich weiß, csv Werte zu extrahieren, aber hier meine Zeichenfolge hat einigen Anfangswert als auch. Wie kann ich es beheben?

War es hilfreich?

Lösung

Starten Sie über die Struktur einer Definition zu denken, sagen wir,

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

(Type) followed by

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

dann versuchen, jede Gruppe zu konvertieren:

^      \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

als Hausaufgaben Linke Leerzeichen zu entfernen und die endgültige regex zu reparieren.

Andere Tipps

Hier finden Sie einige nützliche Informationen, die Sie verwenden können,

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

Sie können Ihren regulären Ausdruck aus der [C # Grammatik] ( http://msdn.microsoft.com/en-us/library/aa664812 (VS.71) .aspx) . Doch der Aufbau einen Parser wäre sicherlich besser sein.

Versuchen Sie folgendes:

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

Es wird Ihr Beispiel-Code übereinstimmen

int i,k = 10,l=0

Und einige Annahmen über die Sprache zu machen können Sie oder können nicht verwenden, es wird auch passen:

int i, j, k=10, l=0
string i=23, j, k=10, l=0
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top