正则表达式重用模式来捕获多个组?

我想多次匹配一些模式,就像这里描述的那样。

^(somelongpattern[0-9])([,; ]+(?1))*$ 

这将匹配例如:

 somelongpattern0 somelongpattern9 ,; somelongpattern2 

但是上面的代码在pcre中工作,它在java中不起作用。 它给我一个错误“未关闭的选项组”(?1)

有什么方法可以做到这一点吗? 我有一个非常长的正则表达式模式,如果可能的话我不想重复2次。

在查看Java文档时,他们仍然不遵循子程序的PCRE指南。 基本上Java Regex不支持子例程。

另请参阅Java Regex手册

Java中的正则表达式引擎不支持子例程 (如PHP或Ruby)。

因此,您可以通过将重复的子模式定义为单独的变量并使用它们来构建最终的正则表达式来解决它:

 String block = "somelongpattern[0-9]"; String final_regex = "^(" + block + ")([,; ]+" + block + ")*$"; 

或者使用String.format

 String block = "somelongpattern[0-9]"; String final_regex = String.format("^(%1$s)([,; ]+%1$s)*$",block); 

请参阅在线演示 。