我编译正则表达式图案在调试控制台匹配特定的命令,其中之一是:为什么非捕获组更改正则表达式的行为?
Pattern.compile("^\\s*\\\\connect\\s+((\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$");
因此有可能进入
\connect 127.0.0.1 2345
或离开港口
\connect 127.0.0.1
只要我使用最后一个空格来分隔字段,就会忽略空格。但是,当IP转到组1(这是可以的),端口转到组3(正如我写的,我知道)。
所以我想用一个非捕获组为IP地址的前三部分:
Pattern.compile("^\\s*\\\\connect\\s+((?:\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$");
所以我想我会得到第1组的IP地址和第2组 端口但是现在Matcher.matches()对于相同的输入返回false ...问题在哪里?
Arrgh,它确实工作。首先,我还遇到了另一个导致匹配器错误的问题。我解决了这个问题,删除了?:所以它再次运行。然后我重试了非分组,但是用matcher.group(2)调用的断点_behind_。它没有被击中,所以我认为它仍然不起作用。但问题是我忘记将包含端口的组的呼叫从3改为2.因此出现异常。我看不到它,因为在调用一个调用命令检查方法的方法的Method.invoke调用周围的try catch结构中,它没有输出。 – jue78 2012-08-10 11:48:26