【发布时间】:2016-02-20 10:15:02
【问题描述】:
我已经使用 swing 组件编写了一个基本的 CLI,并且正在使用 Regex 来识别命令。
我遇到了一些奇怪的事情,我无法解释。我在这里做错了什么?
这是我的代码:
class GraphCommandFactory {
private final GraphSearchController controller;
private final GraphSearchModel model;
private final ArrayList<Pattern> commands;
public GraphCommandFactory(GraphSearchController controller, GraphSearchModel model) {
this.model = model;
this.controller = controller;
this.commands = new ArrayList<>();
commands.add(Pattern.compile("SET START ([A-Z]{4,8})"));
}
public Command createCommand(String commandString) {
Command returnCommand;
// Test the string against each regex
int command = 0;
Matcher matcher = commands.get(command).matcher(commandString);
...
private String[] extractArguments(Matcher matcher) {
String[] arguments = new String[matcher.groupCount()];
for (int i = 0, j = matcher.groupCount(); i < j; i++) {
arguments[i] = matcher.group(i);
}
return arguments;
}
问题在于 extractArguments 函数...使用模式(在匹配器中):
Pattern.compile("SET START ([A-Z]{4,8})"));
输掉最后一组。但是,如果我将其修改为:
Pattern.compile("SET START ([A-Z]{4,8})()"));
然后它正确地捕获了我想要的。
我是否误解了如何使用正则表达式、模式和匹配器?或者这是最后一个捕获组丢失的错误?
我使用 Java SDK 1.8 和 Netbeans 作为我的 IDE。使用调试工具让我无所适从。
【问题讨论】: