有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

例如,如果我的正则表达式的形式为:

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

我想要动态地创建传递/替换wordX的正则表达式字符串,并且我想要传递一个可变数量的单词,例如仅2个或7个

即以以下方式结束:

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

在一次通话和另一次通话中:

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

如果有良好的支持,正则表达式不适合这些构造的答案是可以接受的


共 (1) 个答案

  1. # 1 楼答案

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

    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) + ")?";
    }
    

    你将不得不自己测试和调试这段代码,但它应该会给你一个想法。(如果你确实发现了漏洞,请为以后的其他人编辑此帖子。)