从Strings编译的正则表达式的匹配器错过了组

时间:2016-04-29 12:55:33

标签: java regex

这一定很简单,但我无法理解它。

我有一个字符串“qu'il”。

我还有一个String pttrns包含应该检查的模式,如下所示:

pttrns = "^(([dcjlmnstDCJLNMST]'|[Qq]u'|[Jj]usqu'|[Ll]orsqu'))(.+)$";

我构建我的模式:p = Pattern.compile("^(" + p + ")(.+)$");

现在我尝试匹配:

m = p.matcher("qu'il");

我期待三组:

  • 0:qu'il
  • 1:qu'
  • 2:il

相反,我得到了

  • 0:qu'il
  • 1:qu'il
  • 2:qu'
  • 3:qu'

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

删除不必要的捕获组。此外,您还不需要在已经锚定的正则表达式之前添加^(

pttrns = "^([dcjlmnstDCJLNMST]'|[Qq]u'|[Jj]usqu'|[Ll]orsqu')(.+)$";
p = Pattern.compile(pttrns);

DEMO