7

Java ソース コードの文字列リテラルに一致する正規表現を探しています。

出来ますか?

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

私の意図は、別の文字列内のすべての文字列を別のものに置き換えることです。使用:

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

このようなもの。

4

4 に答える 4

4

Ok。では、文字列内で、二重引用符で始まり二重引用符で終わる一連の文字を検索する必要があるのでしょうか。

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

貪欲でない.*?パターンに注意してください。

于 2010-06-02T15:21:11.750 に答える
2

この正規表現は二重引用符も処理できます (注: perl 拡張構文):

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

各 " の前に奇数のエスケープ \ が必要であると定義します

これを少し美化することは可能かもしれませんが、この形で機能します

于 2012-10-25T13:54:31.077 に答える
1

Java用のさまざまなパーサジェネレータと、StringLiteral文法要素の正規表現を確認できます。

これがANTLRの例です:

StringLiteral
    :  '"' ( EscapeSequence | ~('\\'|'"') )* '"'
    ;
于 2010-06-02T14:52:57.237 に答える
-1

発見を行うために使用しているツールは言いません(perl?sed?テキストエディターctrl-Fなど)。しかし、一般的な正規表現は次のようになります。

\".*?\"

編集:これは簡単で汚い答えであり、エスケープされた引用符やコメントなどには対応していません

于 2010-06-02T14:54:41.117 に答える