用于从输入字符串生成正则表达式的Java库

时间:2012-07-30 14:17:13

标签: java regex

有许多网站将字符串作为用户输入,并允许您从字符串的各个部分创建正则表达式(正则表达式)。

但我找不到任何相同的java库。是否有可用的Java库生成与字符串完全匹配的正则表达式?

String inputString = "ABC345";
String regularExpression = Something.generateRegEx(inputString);

或类似的东西。

注意:我有一个条件,我想从用户那里获取一些字符串,生成正则表达式,然后在某些数据集上匹配该模式以提取相似的模式。我已经创建了一个小实用程序,但它还不是那么可靠。此外,我正在寻找一些经过良好测试的图书馆。

编辑:

请访问txt2re.com。我想要一个执行相同功能的java库。

4 个答案:

答案 0 :(得分:2)

Pattern.quote(String)返回一个完全匹配指定字符串的(字符串)正则表达式。

答案 1 :(得分:2)

我认为,txt2re.com有一个来自已知正则表达式的数据库,因为该工具使用“日期”或“电子邮件”等语义扩展其日期和电子邮件格式的答案。否则,它会给出一个表达式,它只验证字符串但不验证“常规语言”。常规语言由正则表达式表示,它们可以通过有限状态机计算,但它们是有限单词集(所有有限语言都是常规表达式)。例如,简单的语言,如:

L = { (a^n)(b^n) | n >= 0 } is not regular. (proof with pumping lemma)

L = {ab, aabb, aaabbb,...} (not- regular) 

如果你考虑,输入是一组无限词(包括自然语言),但是,正则表达式不能描述所有这些词。为了生成语言的正则表达式,您必须首先使用(TYPE-3)语法对其进行描述。

如果您的语言只有这样的字词:

L = { your.name@example.com }

然后你可以编写一个基本的编译器迭代字符,同时检查它们的类型, 伪:

s = size(input) 
result = ""
for (i = 0; i < s; i++) {
   if input[i] is numeric
      result += "d"
   else if input[i] is word
      result += "w" 
   ...
}
return result

答案 2 :(得分:0)

基于遗传算法的Java库(例如regex ++网址:https://github.com/MaLeLabTs/RegexGenerator)可用于相同目的。

答案 3 :(得分:-1)

如果你想要的是找到一个匹配给定String的正则表达式,这没有意义,因为它存在无数个。

相反,如果您想从用户输入的正则表达式构建Pattern对象,请以这种方式使用标准java API(java.util.regex.*):

Pattern p = Pattern.compile(inputString);