要匹配的示例源代码是
String string="welcome";
String k="a\"welcome";
我在java中使用"(\"[^(\")]*\")"
正则表达式。
但这提取
0:"welcome"
0:"a\"
预期输出
0:"welcome"
0:"a\"welcome"
我应该在正则表达式中做出哪些改变以获得预期的输出?
Java源代码:
private static String pattern1="(\"[^(\")]*\")";
public void getStrings(){
Pattern r = Pattern.compile(pattern1);
Matcher m = r.matcher("String string=\"welcome\";\n" +
"String k=\"a\\\"welcome\";");
while(m.find()){
System.out.println("0:"+m.group(0));
}
}
答案 0 :(得分:1)
在你的正则表达式中使用lookahead和lookbehind,
(?<==)(".*?")(?=;)
从组索引1中获取值。
Pattern r = Pattern.compile("(?<==)(\".*?\")(?=;)");
Matcher m = r.matcher("String string=\"welcome\";\n" +
"String k=\"a\\\"welcome\";");
while(m.find()){
System.out.println("0:"+m.group(1));
}
<强>输出:强>
0:"welcome"
0:"a\"welcome"
或强>
使用*
,
Pattern r = Pattern.compile("(\".*\")");
或强>
它会跳过双引号,前面加一个反斜杠,
Pattern r = Pattern.compile("(\\\".*?(?<=[^\\\\])\\\")");
答案 1 :(得分:0)
为什么你甚至打扰变量赋值。您知道""
中的所有内容都是字符串。
"(.+)"\s*;
应该做得很好。