0

我正在使用以下代码使用 Java 7 来验证文件的格式:

private boolean validateFile(String image) {    
    // Get width and height on image
    ...
    ...
    //Multiply by three, once for each R,G, and B value for the pixel
    int entriesRequired = width * height * 3;
    Pattern pattern = Pattern.compile("w=\\d+\\s+h=\\d+\\s+OK\\s+[\\d+\\s+]{" + entriesRequired + "}");
    Matcher matcher = pattern.matcher(image);

    return matcher.matches();
}

我已读入字符串并由image变量保存的文件如下所示:

"w=1\nh=2\nOK\n1\n2\n3\n4\n5\n6\n"

我期待validateFile(String image)返回 True,但它一直返回 false。有任何正则表达式专家可以帮助我吗?

谢谢,乔什

4

1 回答 1

3

你的正则表达式是错误的。

"w=\\d+\\s+h=\\d+\\s+OK\\s+[\\d+\\s+]{" + entriesRequired + "}"

[\\d+\\s+]{n}n表示“使用任何\d, \s, . 创建的长度字符串+。”

您想要的内容\d+\s+重复 n 次,因此将括号更改为括号:

"w=\\d+\\s+h=\\d+\\s+OK\\s+(\\d+\\s+){" + entriesRequired + "}"

这个对我有用


旁注:在这种特殊情况下,您不需要Patternand Matcher,您可以使用

image.matches("w=\\d+\\s+h=\\d+\\s+OK\\s+(\\d+\\s+){" + entriesRequired + "}");

由于您的正则表达式验证整个字符串

于 2013-10-12T16:21:25.647 回答