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
}
但是,如果我做了像
这样的事情public static String FILL_IN_THE_BLANK_REGEX = "\\\\[blank_tag.\\\\]";
打印2是正确的。
'+'在这里不起作用我不知道为什么。
(空白标签可以是[blank_someusertag])
答案 0 :(得分:6)
请参阅javadoc for Pattern
。我相信这是因为+
是一个greedy量词,因此可以匹配所有内容。您可以在?
之后添加+
,以使其不情愿。
public static String FILL_IN_THE_BLANK_REGEX = "\\[blank_.+?\\]";
将打印
2
答案 1 :(得分:3)
.+
将匹配任何字符1次或更多次。
使用非贪婪的?
确保您只捕获到下一个定义的表达式。
您的工作表达:\\[blank_.+?\\]