问题
我有一个类似于“提名 ? 个奥斯卡金像奖”或“提名 2 个金球奖。提名 ? 个奥斯卡金像奖。30 次获胜,18 次提名”的模式。我想用正则表达式确定问号所代表的奥斯卡数量。
我的尝试
根据以下问题:如何在 Java 中提取两个字符串之间的内容? 和 如何找到两个字符串之间的值? 我尝试了以下模式:
final Pattern pattern = Pattern.compile("for(.*?)Oscar");
接下来,我尝试了以下这个问题:Java - 最佳方法获取两个字符串之间的所有字符串?(使用正则表达式?)
final Pattern pattern = Pattern.compile(Pattern.quote("Nom") +"(.*?)"+ Pattern.quote("Oscar"));
我的剩余代码如下:
final Matcher matcher = pattern.matcher("Nom for 3 Oscar");
while(matcher.find()){
}
Log.d("Test", matcher.group(1));
所有这些模式都会导致以下异常:
我想我可能只是忽略了一些非常简单的事情。java.lang.IllegalStateException: No successful match so far
你们能帮帮我吗?
编辑
所以问题是,我在循环后调用了matcher.group(1)。我误解了find方法的工作原理。然而,当我在循环内调用matcher.group(1)时,这段代码确实有效。
final Pattern pattern = Pattern.compile("for(.*?)Oscar");
final Matcher matcher = pattern.matcher("Nom for 3 Oscar");
while(matcher.find()){
Log.d("Test", matcher.group(1));
}