2012-04-03 8 views
0

ich nicht diese Arbeit bekommen kann ..Java regex Split auf Leerzeichen nicht vor oder gefolgt von einfachen oder doppelten Anführungszeichen

Ich habe einen String, die ich auf Räume geteilt werden soll. Ich möchte mich jedoch nicht in Strings aufteilen. Das heißt, Text, der sich in doppelten oder einfachen Anführungszeichen befindet.

Beispiel

Splitting die folgende Zeichenfolge:

private String words = " Hello, today is nice " ; 

..should folgende Token zu erzeugen:

private 
String 
words 
= 
" Hello, today is nice " 
; 

Welche regex kann ich dafür verwenden?

+0

Sollte das nicht funktionieren? "[^ \\ s \" '] + | \ "[^ \"] * \ "|' [^ '] *'" – jpaw

+0

Duplikat von [this] (http://stackoverflow.com/questions/366202/regex-for-splitting-a-string-using-space-wenn-nicht-umgeben-durch-single-oder-double) –

+0

sah es an, aber dachte, es war anders. Jetzt merke ich, dass es dieselbe Frage ist. Es tut uns leid! – jpaw

Antwort

0

Die Regex ([^ "]*)|("[^"]*") sollte alle Tokens übereinstimmen. Aufbauend auf meiner begrenzten Kenntnisse von Java und http://www.regular-expressions.info/java.html, sollten Sie in der Lage sein, so etwas zu tun:

// Please excuse any syntax errors, I'm used to C# 
Pattern pattern = Pattern.compile("([^ \"]*)|(\"[^\"]*\")"); 
Matcher matcher = pattern.matcher(theString); 
while (matcher.find()) 
{ 
    // do something with matcher.group(); 
} 
+0

Danke Kumpel. Dies war für meine Anwendung geeignet und es funktioniert gut. – jpaw

0

Haben Sie versucht das?

((['"]).*?\2|\S+) 

Hier ist, was es tut:

(  <= Group everything 
    (['"]) <= Find a simple or double quote 
    .*?  <= Capture everything after the quote (ungreedy) 
    \2  <= Find the simple or double quote (same as we had before) 
    |  <= Or 
    \S+  <= Non space characters (one at least) 
) 

Auf einer anderen Anmerkung, wenn Sie einen Parser erstellen möchten, gehen Sie einen Parser und nicht reguläre Ausdrücke verwenden.

+0

Versucht dies .. aber es extrahiert keine Token aus irgendeinem Grund .. vielleicht nicht geeignet für die Split-Methode? Zeichenfolge [] tokens = myString.get (x) .split ("(('')). *? \\ 2 | \\ S +)"); – jpaw