Java模式正则表达式赢得';不匹配

Java模式正则表达式赢得';不匹配,java,regex,Java,Regex,无法理解为什么下面的模式与任何内容都不匹配。包括我的一些更简单的测试示例: // Pattern attempts to match against a String containing ?[0-9]?+ Pattern groups = Pattern.compile(".*?\\?([2-9]+)\\?.*"); Matcher m = groups.matcher("incSkl(?2?,2)"); int val = Integer.parseInt(m.group(1

无法理解为什么下面的模式与任何内容都不匹配。包括我的一些更简单的测试示例:

// Pattern attempts to match against a String containing ?[0-9]?+
Pattern groups = Pattern.compile(".*?\\?([2-9]+)\\?.*");        
Matcher m = groups.matcher("incSkl(?2?,2)");
int val = Integer.parseInt(m.group(1));
甚至变得非常简单,并尝试输入一个简单的“?2?”到matcher。仍然会在第3行出错

奇怪的是,下面的正则表达式测试人员似乎同意我的观点。它说两个输入都应该是有效的完全匹配,模式上不需要任何标志

这是怎么回事?我甚至在CoderPad上抛出了一些东西,只是为了确保我的环境没有“关闭”,它也会出现“不匹配”的错误

我意识到在这一点上我可能可以用find()做一些事情(这个用例的选项是最明智的),但我从来没有发生过这样的事情,在这一点上,我想知道为什么当大多数其他正则表达式实现顺利通过时,它不能进行完全匹配。

您需要调用:

m.find()

调用前:
m.group(1)
否则,您的代码将在调用
group()时抛出一个很好的异常。
您需要调用:

m.find()

调用前:
m.group(1)
否则,您的代码将在调用
group()时抛出一个很好的异常。
您需要调用:

m.find()

调用前:
m.group(1)
否则,您的代码将在调用
group()时抛出一个很好的异常。
您需要调用:

m.find()


在调用之前:
m.group(1)
否则您的代码将在调用
group()时抛出一个很好的异常。一分钟前才意识到。每隔一次我使用Matcher之前,我都会有一个if(m.matches())。这次我没有,因为在代码中的那个地方输入已经被验证了。到目前为止,我与过度错误检查的完美一致性阻止了我意识到显式调用它是必要的!赞成。一分钟前才意识到。每隔一次我使用Matcher之前,我都会有一个if(m.matches())。这次我没有,因为在代码中的那个地方输入已经被验证了。到目前为止,我与过度错误检查的完美一致性阻止了我意识到显式调用它是必要的!赞成。一分钟前才意识到。每隔一次我使用Matcher之前,我都会有一个if(m.matches())。这次我没有,因为在代码中的那个地方输入已经被验证了。到目前为止,我与过度错误检查的完美一致性阻止了我意识到显式调用它是必要的!赞成。一分钟前才意识到。每隔一次我使用Matcher之前,我都会有一个if(m.matches())。这次我没有,因为在代码中的那个地方输入已经被验证了。到目前为止,我与过度错误检查的完美一致性阻止了我意识到显式调用它是必要的!您的模式中的
\\**
有什么意义?这将匹配零次或多次出现的
*
,但如果没有,则
*
仍将匹配输入中的所有星号。因此,
\**
除了让你的模式更丑陋之外,没有任何区别。从模式被“\\?([2-9]+)\?\**”删除时开始,看起来变化管理很差。你的模式中的
\**
有什么意义?这将匹配零次或多次出现的
*
,但如果没有,则
*
仍将匹配输入中的所有星号。因此,
\**
除了让你的模式更丑陋之外,没有任何区别。从模式被“\\?([2-9]+)\?\**”删除时开始,看起来变化管理很差。你的模式中的
\**
有什么意义?这将匹配零次或多次出现的
*
,但如果没有,则
*
仍将匹配输入中的所有星号。因此,
\**
除了让你的模式更丑陋之外,没有任何区别。从模式被“\\?([2-9]+)\?\**”删除时开始,看起来变化管理很差。你的模式中的
\**
有什么意义?这将匹配零次或多次出现的
*
,但如果没有,则
*
仍将匹配输入中的所有星号。因此,拥有
\**
除了让你的模式更丑陋之外,没有任何区别。从模式被“\\?([2-9]+)\?\**”删除时开始,看起来变化管理很差。