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

行。那么您想要的是在字符串中搜索以双引号开头和结尾的字符序列吗?

    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 回答