【问题标题】:Extract Substring from Regex [duplicate]从正则表达式中提取子字符串 [重复]
【发布时间】:2017-02-15 19:54:18
【问题描述】:

我有一个在 java 中应该如下所示的输入字符串:
String input = add entity <a-zA-Z>,<a-zA-z>
现在我想检查给定的字符串是否具有正确的格式。如果是这样,我想得到手的话。

我已经有检查部分了

boolean foo(String input) {
    Pattern pattern = Pattern.compile("add entity [a-zA-Z]*[,][a-zA-Z]*");
    Matcher matcher = pattern.matcher(input);
    return matcher.matches();
}

我在这里发现了其他几个问题,他们已经解决了类似的问题

if(matcher.find()) {
    System.out.println(matcher.group(1));
}

但如果我这样做,控制台总是会抛出异常:

Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1

有人对我如何解决这个问题有建议吗? 非常感谢你们。

【问题讨论】:

  • String.matches# 方法做同样的事情。由于模式匹配整个字符串 + 没有捕获组 --> group[1] 将是错误的。

标签: java regex matcher


【解决方案1】:

Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1

此错误是由于您的正则表达式模式没有捕获组 #1。

您可以将模式更改为:

Pattern pattern = Pattern.compile("add entity ([a-zA-Z]*,[a-zA-Z]*)");

所以"add entity " 的一部分被捕获到组#1 中。请注意,在正则表达式模式中不需要转义逗号。

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多