2016-04-10 15 views
-1

Ich habe eine folgende Zeichenfolge:Java spalten komplexe Zeichenfolge mit Regex

field 'data' OR field2 'data2 complex' AND (field3 'data3' OR field3 'data4') 

ich nedd es in eine Form zu spalten:

[field, 
data, 
OR, 
field2, 
data2 complex, 
AND, 
(, 
field3, 
data3, 
OR 
field3, 
data4, 
)] 

Ist es möglich, es zu tun regex? Bitte, hilf mir, den richtigen zu schreiben, um diese Aufgabe zu lösen. Vielen Dank

+0

Sie tun nichts anderes als auf Räume spalten ...? – sweaver2112

+0

können Sie mehr erklären? Was ist die ursprüngliche Saite und was erwartest du, um sie zu teilen? – AsafSavich

+0

@ sweaver2112 Nein, es ist nicht auf Platz spalten – rock321987

Antwort

0

Wenn ich Ihre Anforderungen richtig gelesen habe, möchten Sie "single quote abgegrenzte Sequenzen" ODER Klammern oder alphanumerische Wörter.

So könnten Sie use this regex (set global auf true, damit Sie es einen nach dem anderen tokenize können):

/('[^']*?'|\w+|[\(\)])/g 

[Anmerkung: Diese einfache regex wäre Konto nicht für verschachtelte oder entkam einfache Anführungszeichen in der Zeichenfolge , dies richtig zu tun ist möglich, mit regex aber viel komplizierter]

, wenn Sie zu einem Einzelspiel wollten und dann Gruppen Zugriff auf Ihrem Spiel um Ihre Daten zu erhalten, just account for the space delimiters.

/(?:('[^']*?'|\w+|[\(\)])\s*)+/ 
1

Sie auch diese regex verwenden:

String[] list = s.split("'|(\\b(?![^']*?\\w'))"); 

Die Ausgabe lautet:

[Feld, Daten, OR, field2, Daten2 Komplex, AND, (, field3 ,, data3, OR, field3, data4,)]

die Idee zu Wort boundries zu spalten (\\b) nur dann, wenn die nächsten ' eine Öffnung Apostroph, kein Schließen o ne (denn dann wärst du drin).

Ich habe versucht, die leeren Räume aufzuräumen, ohne die Regex zu vermasseln, und ich konnte keinen Weg finden (ich bin neu in Regex). Also bitte seien Sie willkommen, es zu bearbeiten, wenn Sie können.