Java - 为什么此模式匹配不起作用


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_.+?\]

最新更新