Java Regular Expression找不到匹配项

sta*_*les 0 java regex

我正在使用Java正则表达式问题.我需要匹配的字符串遵循这种模式:378-Columbian Forecast Yr-NB-Q-Columbian_NB我需要提取第一个和第二个之间的内容-.

Pattern modelRegEx = Pattern.compile("[^-]{15,}[^-]");
Matcher m = modelRegEx.matcher(temp);
String model = m.group(0);
Run Code Online (Sandbox Code Playgroud)

以下是这个正则表达式背后的理由[^-]{15,}[^-]:

我只想要使用连字符之间的内容[^-].连字符之间有多个文本实例,所以我选择了一个足够大的数字,它不会在较小的匹配上获取.所以我用过{15,}

我的错误:

 Exception in thread "main" java.lang.IllegalStateException: No match found
 at java.util.regex.Matcher.group(Matcher.java:496)
 at alfaSpecificEditCheck.tabTest.main(tabTest.java:21)
Run Code Online (Sandbox Code Playgroud)

当我在这里测试我的正则表达式模式时:http://regexpal.com/模式匹配.当我使用此测试仪更具体地针对Java进行测试时(http://www.regexplanet.com/advanced/java/index.html)结果是未找到匹配项.

Psh*_*emo 5

你需要让正则表达式引擎首先找到它的匹配.通常让我们迭代我们使用的所有匹配部分

Pattern modelRegEx = Pattern.compile("[^-]{15,}[^-]");
Matcher m = modelRegEx.matcher(temp);
while(m.find()){// <-- add this
    String model = m.group(0);
    //do stuff with each match you will find
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你想要找到至少15个东西,那么你想要找到它至少16次,所以看起来你的正则表达式可以被重写为

Pattern modelRegEx = Pattern.compile("[^-]{16,}");
//                                         ^^
Run Code Online (Sandbox Code Playgroud)