首页 > 解决方案 > 需要一个 java.util.regex 来检索引号中的值

问题描述

我有这个字符串:

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

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

标签: regexpattern-matching

解决方案


您可以使用

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

请参阅正则表达式演示

图案细节

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

推荐阅读