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

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

最佳答案

只需在您的正则表达式中使用先行和后行,,

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

从组索引 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("(\\\".*?(?<=[^\\\\])\\\")");

关于java - 从java代码中提取字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25700987/

相关文章:

php - 在 RegEx 中,如何找到包含不超过 3 个唯一字符的行?

objective-c - 如何从 Regex 捕获组中删除空格?

java - 为什么这个 NumberFormatException?

java - 来自字符串的位图

java - 一些媒体播放器如何在 Android 上播放 wma

用正则表达式替换时,Ruby gsub 不遵守命名组

c++ - sed 删除下划线并提升字符

Java 方法和返回语句

java - 如何从主类加载 Java GUI 类?

.net - 如何检查 RegEx 是否具有正确的语法?