2016-05-04 10 views
1

Ich habe ein Array von regulären Ausdrücken. Eine davon muss mit allen Zeichenfolgen in einer gegebenen Java-Datei übereinstimmen.Regex für den Abgleich eines String-Literals in Java?

Dies ist die Regex Zeichenfolge ich bisher habe: "(\").*[^\"].*(\")"

jedoch die Zeichenfolge "Hello\"good day" abgelehnt wird, obwohl die Anführungszeichen in der Zeichenfolge entkommen ist. Ich denke, was ich habe sofort das String-Literal zurückgewiesen, wenn es ein Anführungszeichen innerhalb findet, unabhängig davon, ob es oder nicht Escape ist. Ich brauche String-Literale mit entsprungenen Anführungszeichen, aber es sollte "Hello"Good day" zurückweisen.

Pattern regex = Pattern.compile("(\").*[^\"].*(\")", Pattern.DOTALL); 
    Matcher matcher = regex.matcher("Hello\"good day"); 
    matcher.find(0); //false 
+1

Bitte geben Sie einen [MCVE] ein. –

+0

Wahrscheinlich möchten Sie einen negativen Blick auf das Zeichen "" werfen. Aber Sie werden es schwer haben, mit Kommentaren umzugehen. – aioobe

+0

Auch Sie sagen '' Hallo \ "guten Tag \" wird abgelehnt 'und dann sagst du' aber Es sollte "Hallo" Guten Tag "" ablehnen. Das bedeutet, es funktioniert. – PeterS

Antwort

6

In Java Sie diese Regex verwenden können alle Zitate zwischen " und " entkam zum Spiel:

boolean valid = input.matches("\"[^\"\\\\]*(\\\\.[^\"\\\\]*)*\""); 

Regex benutzt wird:

^"[^"\\]*(\\.[^"\\]*)*"$ 

Breakup:

^    # line start 
"    # match literal " 
[^"\\]*  # match 0 or more of any char that is not " and \ 
(   # start a group 
    \\   # match a backslash \ 
    .   # match any character after \ 
    [^"\\]* # match 0 or more of any char that is not " and \ 
)*   # group end, and * makes it possible to match 0 or more occurrances 
"    # match literal " 
$    # line end 

RegEx Demo

+0

Pattern regex = Pattern.compile (" \ "([^ \" \\\\] *) (\\\\. [^ \ "\\\\] *) * \" ", Pattern.DOTALL); Matcher matcher = regex.matcher (" Hallo guten Tag"); boolesches Ergebnis = matcher.find (0); // Ich bekomme false, wenn ich Ihre Regex-Zeichenfolge auf diese Weise verwende. Wie kann ich es zum Laufen bringen – pythonbeginner4556

+1

vergiss es, es hat funktioniert !! Danke – pythonbeginner4556

+0

Etwas schneller, wenn Sie Cluster-Gruppe statt Capture verwenden. – sln