gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:05:25 25 4
gpt4 key购买 nike

我想多次匹配某个模式,就像描述的一样 here .

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

这将匹配例如:

somelongpattern0
somelongpattern9 ,; somelongpattern2

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

有什么办法吗?我有一个很长的正则表达式模式,如果可能我不想重复它 2 次。

最佳答案

Java 中的正则表达式引擎不支持subroutines (如在 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);

参见 online demo .

关于java - 正则表达式重用一个模式来捕获多个组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46466549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com