gpt4 book ai didi

Java 正则表达式匹配组错误?

转载 作者:行者123 更新时间:2023-12-03 23:14:26 25 4
gpt4 key购买 nike

我已经使用 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 函数...使用模式(在 Matcher 中):

Pattern.compile("SET START ([A-Z]{4,8})"));

失去最后一组。但是,如果我将其修改为:

Pattern.compile("SET START ([A-Z]{4,8})()"));

然后它正确地捕获了我想要的内容。

我是否误解了正则表达式、模式和匹配器的使用方式?或者这是最后一个捕获组丢失的错误?

我使用 Java SDK 1.8 和 Netbeans 作为我的 IDE。使用调试工具让我一无所知。

最佳答案

问题出在你的 for 循环中:

for (int i = 0, j = matcher.groupCount(); i < j; i++) {
arguments[i] = matcher.group(i);
}

因为你只比 matcher.groupCount 少了 1 个循环

将此更改为:

for (int i = 0; i <= matcher.groupCount(); i++) {
arguments[i] = matcher.group(i);
}

根据 Javadoc:

groupCount returns the number of capturing groups in this matcher's pattern. Group zero denotes the entire pattern by convention. It is not included in this count.

关于Java 正则表达式匹配组错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35521794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com