我们有一个模式:
Pattern TRANSLATION_RAW_PATTERN = Pattern.compile("(?<key>(\\$\\{(?<keydata>.*?)\\}))|(?<value>(.*?))")
和输入:
$ {something} $ {something.else}
使用在线模式匹配器,这将导致以下两个关键数据组:
“某物”和“ something.else”
但是,它实际上导致了“ something} $ {something.else”
String rawContents = getContents();
Matcher contentMatcher = TRANSLATION_RAW_PATTERN.matcher(rawContents);
while (contentMatcher.matches())
{
final String keyGroupMatching = contentMatcher.group("keydata");
if (keyGroupMatching == null)
{
break;
}
rawContents = rawContents.replace("${" + keyGroupMatching + "}", I18n.translateToLocal(keyGroupMatching));
contentMatcher = TRANSLATION_RAW_PATTERN.matcher(rawContents);
}
return rawContents;
这种情况已经在第一次迭代中发生。第一次检索该组时,它已经检索错了。
我们在这里有点困惑,因为我们尝试过的所有在线模式匹配器都会返回正确的分组。