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])
请参阅 javadoc 了解Pattern
。我相信这是因为+
是一个贪婪的量词,因此可以匹配它所能匹配的一切。您可以在+
后添加一个?
以使其不情愿。
public static String FILL_IN_THE_BLANK_REGEX = "\[blank_.+?\]";
将打印
2
.+
将匹配任何字符 1 次或更多次。
使用非贪婪?
来确保只捕获到下一个定义的表达式。
您的工作表达:\[blank_.+?\]