Java 从自然语言创建正则表达式

Java 从自然语言创建正则表达式,java,regex,Java,Regex,我想知道在哪里可以从Java中的自然语言创建正则表达式。为了解释这一点,让我给出一个用例 支持我想检查以下字符串的格式是否正确 "aaaa-bbbb-cccc" 本例中有效字符串的业务定义如下: 4 letters, then hyphen, then 4 letters, then hyphen, then 4 letters. 实现这一点的通常方法是从业务中获取需求,并相应地编写正则表达式。但我很想知道是否有任何库可用于从自然语言创建正则表达式。因此,我们可以要求业务部门以他们也能理解的

我想知道在哪里可以从Java中的自然语言创建正则表达式。为了解释这一点,让我给出一个用例

支持我想检查以下字符串的格式是否正确

"aaaa-bbbb-cccc"
本例中有效字符串的业务定义如下:

4 letters, then hyphen, then 4 letters, then hyphen, then 4 letters.

实现这一点的通常方法是从业务中获取需求,并相应地编写正则表达式。但我很想知道是否有任何库可用于从自然语言创建正则表达式。因此,我们可以要求业务部门以他们也能理解的方式提供格式。

您可能希望了解可用于Java的业务规则引擎:。在业务规则引擎中,您可以定义从业务中获得的需求(规则),然后对照它们检查传入的数据(事实)。

您可能需要查看库

这就是如何在代码中创建正则表达式的方法,这是不言自明的。您可以根据需要使用可读代码一次性构建正则表达式变量,而不是使用类型化字符串。以后也很容易改变

String builtRegex = SimpleRegex.regex().startingWith().exactString("abc")
                                   .then().oneOfTheCharacters('d', 'e', 'f')
                                   .build(); 
Pattern pattern = Pattern.compile(builtRegex); 
boolean isMatch = pattern.matcher(testString).matches();

您可能希望使用诸如ANTLR、YACC等编译器。这将为您提供更大的灵活性。您可以通过构建器模式实现相对简单的DSL。一般来说,提供编写任何严格规范的“自然语言”方式是一个非常非常困难的问题。人们写过关于这些主题的博士论文。事实上,没有。自然语言没有秩序。即使某些东西有一个很小的重复性,也几乎不可能得到一个可用的机器创建的正则表达式。正则表达式构造本身是有限的,通常是复杂的非正则表达式算法的基础。如果你让业务人员编写这些,你就不会让他们遵守一些严格的语法,即使这些语法比正则表达式简单得多,更像自然语言。指定与示例相同的内容的有效定义可以是“它应该是由四个字母组成的三组,由破折号分隔”,这可能适用于所描述的情况,但它不是正则表达式。OP能否澄清正则表达式的需要?