2010-03-23 11 views
7

Ich weiß, es gibt bereits viele Fragen wie meine, aber ich habe keine Antwort gefunden, die in Java funktioniert. Also schreibe ich eine neue Frage.Java Regex für übereinstimmende Zeichenfolge in Anführungszeichen mit Escapezeichen

Ich habe Textdateien mit Inhalt wie folgt aus:

 
key1 = "This is a \"test\" text with escapes using '\\' characters"; 
key2 = 'It must work with \'single\' quotes and "double" quotes'; 

Ich brauche einen regulären Ausdruck, die die Werte in den doppelten Anführungszeichen entspricht (oder einfache Anführungszeichen). Dieser reguläre Ausdruck muss die migrierten Anführungszeichen und die umgekehrten Backslashes unterstützen. Der reguläre Ausdruck muss mit Java-Standard-Pattern/Matcher-Klassen funktionieren.

+0

Eng verwandt, kann nützlich sein: http://stackoverflow.com/questions/263985/regex-question -ein-oder-mehr-Leerzeichen-außerhalb-von-einem-Zitat-eingeschlossen-Block-of-text –

Antwort

8

Versuchen Sie diesen regulären Ausdruck:

'([^\\']+|\\([btnfr"'\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*'|"([^\\"]+|\\([btnfr"'\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*" 

Und als Stringliteral:

"'([^\\\\']+|\\\\([btnfr\"'\\\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*'|\"([^\\\\\"]+|\\\\([btnfr\"'\\\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*\"" 
+1

Scheint so weit zu arbeiten, danke. – kayahr

+0

Crikey, das ist ein Regex und eine Hälfte. Bist du gerade auf diese Idee gekommen oder hast du es für eine gewisse Zeit benutzt? (ZB, wie gut getestet würden Sie sagen, es ist?) –

+0

@OP: Dies sieht aus wie es zugeschnitten ist, um Java-Strings und ähnliches zu verarbeiten (es behandelt Unicode-Escapes wie '\ u1234' zum Beispiel und die üblichen Java' \ f') , '\ t' und so). Erwähnen Sie es nur für den Fall, dass Ihre Quelldaten sich etwas davon unterscheiden, da Sie nicht wirklich gesagt haben, dass die Strings im Java-Stil sind, nur dass sie Backslash-maskierte Anführungszeichen und Backslashes haben können. In der Tat, es klingt für mich wie Ihre Strings sind JavaScript (die fast die gleiche Syntax wie Java-Strings haben, so dass Sie wahrscheinlich in Ordnung sind). –

Verwandte Themen