我正在寻找一个正则表达式来匹配 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");
像这样的东西。
我正在寻找一个正则表达式来匹配 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");
像这样的东西。
行。那么您想要的是在字符串中搜索以双引号开头和结尾的字符序列吗?
String bar = "A \"car\"";
Pattern string = Pattern.compile("\".*?\"");
Matcher matcher = string.matcher(bar);
String result = matcher.replaceAll("\"bicycle\"");
注意非贪婪.*?
模式。
这个正则表达式也可以处理双引号(注意:perl 扩展语法):
"
[^\\"]*
(?:
(?:\\\\)*
(?:
\\
"
[^\\"]*
)?
)*
"
它定义了每个 " 必须在它之前有奇数的转义 \
也许可以稍微美化一下,但它以这种形式工作
您可以查看 Java 的不同解析器生成器,以及它们的 StringLiteral 语法元素的正则表达式。
这是来自 ANTLR 的示例:
StringLiteral
: '"' ( EscapeSequence | ~('\\'|'"') )* '"'
;
你没有说你用什么工具来做你的发现(perl?sed?文本编辑器 ctrl-F 等)。但是一般的正则表达式是:
\".*?\"
编辑:这是一个快速而肮脏的答案,不能处理转义的引号、评论等