2013-12-20 120 views
1
public static String FILL_IN_THE_BLANK_REGEX = "\\\\[blank_.+\\\\]"; 

public static int getBlankCountForFillInTheBlank(String questionText) { 
    Matcher m = Pattern.compile(FILL_IN_THE_BLANK_REGEX).matcher(questionText); 
    int count = 0; 
    while (m.find()) ++count; 

    return count; 
} 

public static void main(String[] args) { 
    System.out.println(getBlankCountForFillInTheBlank("abc [blank_tag1] abc [blank_tag2]")); // prints 1 
} 

但如果我這樣做Java - 爲什麼這種模式匹配不起作用?

public static String FILL_IN_THE_BLANK_REGEX = "\\\\[blank_tag.\\\\]"; 

它打印2這是正確的。

'+'在這裏不起作用我不知道爲什麼。
(空白標籤可以是任何類似[blank_someusertag])

回答

3

.+將1次或多次匹配任何字符。

使用非貪婪?確保您只捕獲到下一個定義的表達式。

您的工作表達式:\\[blank_.+?\\]

6

查看javadoc for Pattern。我相信這是因爲+是一個greedy量詞,因此可以匹配所有可以匹配的內容。您可以在+之後添加?以使其不願意。

public static String FILL_IN_THE_BLANK_REGEX = "\\[blank_.+?\\]"; 

將打印

2 
+0

感謝您參考Java文檔的Pattern。 –

+0

@XavierDSouza不客氣。祝你好運。 –

+0

對不起,我無法接受兩個答案。 r3mus是第一個回答.. –

相關問題