我正在调用一个无法更改的API。也就是说,我不能把它作为两个连续正则表达式或类似的东西。API是这样编写的(当然是简化的):
void apiMethod(final String regex) {
final String input =
"bad: thing01, thing02, thing03 \n" +
"good: thing04, thing05, thing06 \n" +
"better: thing07, thing08, thing09 \n" +
"worse: thing10, thing11, thing12 \n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
}
我这样调用它:
apiMethod("(thing[0-9]+)");
我想看到打印出六行,从04到09,每行一行。到目前为止,我还没有成功。我尝试过一些不起作用的事情:
-
“(thing[0-9]+)”-这匹配所有12个东西,这不是我想要的。
-
“^(?:好|更好):(事物[0-9]+)”-这只匹配事物4和7。
-
“^(?:(?:好|更好):.*(事物[0-9]+)”-这只匹配事物6和9。
-
“(?:(?:^好:|^更好:|,)*)(事物[0-9]+)-这匹配除1和10之外的所有内容。
我想要的是所有匹配“thing[0-9]+”的字符串,但只需要那些以“good:”或“better”开头的行中的字符串。
或者,更一般地说,我希望从多行模式中进行多个匹配,但只能从具有特定前缀的行中进行匹配。