7 Stimmen

Richtiges Anpassen eines Java-String-Literal

Ich bin auf der Suche nach einem regulären Ausdruck, um String-Literale in Java-Quellcode abzugleichen.

Ist das möglich?

private String Foo = "A potato";
private String Bar = "A \"car\"";

Meine Absicht ist es, alle Zeichenfolgen innerhalb einer anderen Zeichenfolge durch etwas anderes zu ersetzen. Verwenden:

String A = "I went to the store to buy a \"coke\"";
String B = A.replaceAll(REGEX,"Pepsi");

Etwa so.

4voto

Wangnick Punkte 725

Na gut. Sie wollen also innerhalb einer Zeichenkette nach einer Folge von Zeichen suchen, die mit Anführungszeichen beginnen und enden?

    String bar = "A \"car\"";
    Pattern string = Pattern.compile("\".*?\"");
    Matcher matcher = string.matcher(bar);
    String result = matcher.replaceAll("\"bicycle\"");

Beachten Sie die nicht gierigen .*? Muster.

2voto

Hachi Punkte 3197

Diese Regex kann auch mit doppelten Anführungszeichen umgehen (HINWEIS: erweiterte Syntax von Perl):

"
[^\\"]*
(?:
    (?:\\\\)*
    (?:
        \\
        "
        [^\\"]*
    )?
)*
"

sie legt fest, dass jedes " eine ungerade Anzahl von Leerzeichen haben muss, bevor es

vielleicht kann man das noch ein wenig verschönern, aber in dieser Form funktioniert es

1voto

Uri Punkte 86472

Sie können sich verschiedene Parser-Generatoren für Java und ihre regulären Ausdrücke für das Grammatik-Element StringLiteral ansehen.

Hier ist ein Beispiel aus ANTLR :

StringLiteral
    :  '"' ( EscapeSequence | ~('\\'|'"') )* '"'
    ;

-1voto

Richard H Punkte 36131

Sie sagen nicht, welches Tool Sie für Ihre Suche verwenden (Perl? sed? Texteditor ctrl-F usw.). Aber eine allgemeine Regex würde sein:

\".*?\"

Edit : dies ist eine schnelle und schmutzige Antwort, die nicht mit maskierten Zitaten, Kommentaren usw. zurechtkommt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X