java - 从字符串编译的正则表达式的匹配器未命中组

标签 java regex

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

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

我还有一个字符串pttrns,其中包含应检查的模式,如下所示:

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

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

现在我尝试匹配:

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

我期望三个组:

  • 0: qu'il
  • 1:曲'
  • 2: 伊尔

相反,我得到

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

我该如何解决这个问题?

最佳答案

删除不必要的捕获组。而且您不需要在已锚定的正则表达式之前添加 ^(

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

DEMO

关于java - 从字符串编译的正则表达式的匹配器未命中组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36938943/

相关文章:

C# 中的 Java 集合

java - 仅当不在主方法中时才出错 : oracle. jdbc.driver.OracleDriver ClassNotFoundException

正则表达式 - 将文件重命名为文件名中的最高分辨率

java - 正则表达式: Replace except from specific characters and whitespace

java - 将 includeAll 与类路径* : 一起使用时,变更集文件的 Liquibase 执行顺序

java - 根据点击次数, ImageView 不可见

r - 从 R 中的数据框中拆分逗号分隔模式

javascript - 如何通过转义双引号中的文本来拆分字符串

java - 如何让应用保持存活?运行后出现奇怪的错误

java - 是什么导致这两个正则表达式的工作方式不同?