通过变量参数数量动态创建正则表达式的最佳方法是什么?
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+)?)?)?)?)?)";
可以接受正则表达式不适合这些结构的答案,只要它得到很好的支持。
答案 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) + ")?";
}
您必须自己测试和调试此代码,但它应该为您提供想法。 (如果你确实发现了错误,请为以后来的其他人编辑这篇文章。)