正则表达式从java代码中提取字符串

时间:2014-09-06 13:52:26

标签: java regex

要匹配的示例源代码是

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));
    }
}

2 个答案:

答案 0 :(得分:1)

在你的正则表达式中使用lookahead和lookbehind,

(?<==)(".*?")(?=;)

从组索引1中获取值。

DEMO

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*;应该做得很好。