Java:如何在运行时使用变量参数正确构造正则表达式

时间:2012-01-22 12:12:55

标签: java regex string

通过变量参数数量动态创建正则表达式的最佳方法是什么?

E.g。如果我的正则表达式是以下形式:

String REGEX = "\\b(?:word1(?:(\\s+)word2(?:(\\s+)word3)?)?)";  

我想动态创建正则表达式字符串传递/替换wordX,我想传递可变数量的单词,例如只有2或7或7。

即。最终得到:

REGEX = "\\b(?:cat(?:(\\s+)mouse(?:(\\s+)rain)?)?)";  

在一个电话中,在另一个电话中:

REGEX = "\\b(?:cat(?:(\\s+)mouse(?:(\\s+)rain(?:(\\s+)blue(?:(\\s+)?)?)?)?)?)";  

可以接受正则表达式不适合这些结构的答案,只要它得到很好的支持。

1 个答案:

答案 0 :(得分:4)

您可以编写一个递归函数,它将以您给出的第一个示例的形式生成正则表达式字符串:

String generateRegex(List<String> words)
{
   if(words.isEmpty()) return "";
   String word = words.remove(0);
   return "\\b(?:" + word + generateInnerRegex(words) + ")";
}

String generateInnerRegex(List<String> words)
{
   if(words.isEmpty()) return "";
   String word = words.remove(0);
   return "(?:(\\s+)" + word + generateInnerRegex(words) + ")?";
}

您必须自己测试和调试此代码,但它应该为您提供想法。 (如果你确实发现了错误,请为以后来的其他人编辑这篇文章。)