我正在编译一个正则表达式模式以匹配调试控制台中的特定命令,其中之一是:
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 ......问题出在哪里?