正确匹配Java字符串文字
我正在寻找一个正则表达式来匹配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扩展语法):
" [^\\"]* (?: (?:\\\\)* (?: \\ " [^\\"]* )? )* "
它定义了每个“必须在它之前有一个奇数的转义\”
也许它可以美化这一点,但它以这种forms工作
您可以查看Java的不同解析器生成器,以及StringLiteral语法元素的正则表达式。
以下是ANTLR的示例 :
StringLiteral : '"' ( EscapeSequence | ~('\\'|'"') )* '"' ;
你没有说你用什么工具来做你的发现(perl?sed?文本编辑器ctrl-F等等)。 但一般的正则表达式是:
\".*?\"
编辑:这是一个快速而肮脏的答案,并不处理转义的引号,评论等
用这个:
String REGEX = "\"[^\"]*\"";
经过测试
String A = "I went to the store to buy a \"coke\" and a box of \"kleenex\""; String B = A.replaceAll(REGEX,"Pepsi");
产生以下’B’
I went to the store to buy a Pepsi and a box of Pepsi