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

2023-12-25

我想多次匹配某个模式,就像描述的那样here https://stackoverflow.com/questions/41878948/is-it-possible-to-define-a-pattern-and-reuse-it-to-capture-multiple-groups.

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

例如,这将匹配:

somelongpattern0
somelongpattern9 ,; somelongpattern2

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

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


Java中的正则表达式引擎不支持子程序 https://www.regular-expressions.info/subroutine.html(如在 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);

See the 在线演示 https://ideone.com/0XHJ5o.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式重用一个模式来捕获多个组? 的相关文章

随机推荐