需要 java.util.regex 来检索引号中的值

Need a java.util.regex to retrieve value in quotes

我有这个字符串:

String str = "message version=1 filename=\"double \"\"quote\"\" file.txt\" size=32591";

我想用正则表达式获取文件名值。到目前为止我使用的是:

Matcher fileNameMatcher = Pattern.compile("\s*filename=\"(.*?)\"\s*").matcher(str);
while (fileNameMatcher.find()) {
    int n = fileNameMatcher.groupCount();
    for (int i = 0; i < n; i++)
        this.fileName = fileNameMatcher.group(i + 1);
}

如果文件名中有引号,它将始终加倍 (""),所以我想要一个忽略双引号并从消息中检索引用的文件名值的正则表达式

您可以使用

Pattern.compile("filename=\"([^\"]*(?:\"{2}[^\"]*)*)\"")

参见regex demo

图案详情

  • filename=" - 文字字符串
  • ([^"]*(?:"{2}[^"]*)*) - 第 1 组:
    • [^"]* - "
    • 以外的 0 个或更多字符
    • (?:"{2}[^"]*)* - 0 个或多个双 " 字符序列,然后是 "
    • 以外的 0 个或多个字符
  • " - 一个 " 字符。