May*_*ies 4 java regex string android illegalstateexception
我有一个这样的模式“提名?奥斯卡”或“提名 2 座金球奖。提名?奥斯卡。30 次赢得 18 项提名” 我想确定 ? 用正则表达式,所以奥斯卡的数量。
好像有
对应这个问题:在java中提取两个字符串之间的字符串和
如何在两个字符串之间找到一个值?我试过这种模式:
final Pattern pattern = Pattern.compile("for(.*?)Oscar");
Run Code Online (Sandbox Code Playgroud)
接下来我尝试了这个问题:Java - 在两个字符串之间获取所有字符串的最佳方法?(正则表达式?)
final Pattern pattern = Pattern.compile(Pattern.quote("Nom") +"(.*?)"+ Pattern.quote("Oscar"));
Run Code Online (Sandbox Code Playgroud)
我的其余代码:
final Matcher matcher = pattern.matcher("Nom for 3 Oscar");
while(matcher.find()){
}
Log.d("Test", matcher.group(1));
Run Code Online (Sandbox Code Playgroud)
所有这些模式都会导致此异常:
java.lang.IllegalStateException:到目前为止没有成功的匹配
我想我只是监督一些非常简单的事情。
你们能帮帮我吗?
所以问题是我在循环后调用 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));
}
Run Code Online (Sandbox Code Playgroud)
我在java中的两个字符串之间的提取字符串中编写测试,这是有效的。我认为您的输入字符串不匹配:
@Test
public void regex() {
String str = "Nom for 3 Oscar, dom for 234235 Oscars";
Pattern pattern = Pattern.compile("for(.*?)Oscar");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
3
234235
Run Code Online (Sandbox Code Playgroud)
在我回答之后,您编辑了您的问题,我看到,在您的输入字符串中,“oscar”以小写“o”开头,在 Pattern 中以大写“O”开头。
| 归档时间: |
|
| 查看次数: |
6835 次 |
| 最近记录: |