无法弄清楚为什么以下模式不适合任何事情。包括一些我更简单的测试示例:
// 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?"到匹配。仍然会在第3行出错。
奇怪的是,下面的正则表达式测试人员似乎同意我的观点。它表示两个输入都应该是有效的完全匹配,而模式上不需要任何标志 http://www.regexplanet.com/advanced/java/index.html
这里发生了什么?我甚至在CoderPad上扔了些东西只是为了确保没有什么东西可以关闭'与我的环境,以及“没有匹配”的错误同样。
我意识到在这一点上我可能会用find()做一些事情(这个用例的选项是最明智的),但我从来没有发生过这样的事情,而且此时想要要知道为什么当大多数其他正则表达式实现没有问题时它无法完全匹配。
答案 0 :(得分:3)
您需要致电:
m.find()
或
m.matches()
在调用之前:m.group(1)
否则你的代码会在调用group()
时抛出一个很好的异常