2013-10-12 55 views
0

我使用的Java 7的下面的代碼來驗證文件的格式:Java的正則表達式的問題與量詞

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。任何可以幫助我的正則表達式專家?

感謝, 喬希

+1

@BackSlash如果你的意思是元字符'\ n'(換行符),那麼你錯了。 '\ s'是'[\ r \ n \ v \ t \ f]'。 – Jerry

+1

你不需要括號什麼你重複? (.....){+ entriesRequired +} – MeBigFatGuy

+0

您對entriesRequired的價值是什麼?我認爲你的計算錯誤。你還必須計算新的線路,它適用於你的情況12。 – morja

回答

3

您正則表達式是錯誤的。

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

[\\d+\\s+]{n}手段 「長度n的創建的String使用任何\d\s+」。

你想要的是\d+\s+重複n次,所以更改括號括號:

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

它爲我


邊注:在特定情況下,你不需要您可以使用

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

由於你的正則表達式驗證整個字符串

+0

感謝您的幫助和image.matches(正則表達式)的建議。這將減少我的代碼。 – Josh

+0

@Josh不客氣!如果這個答案解決了你的問題,不要忘記[接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)! :) – BackSlash