有许多网站将字符串作为用户输入,并允许您从字符串的各个部分创建正则表达式(正则表达式)。
但我找不到任何相同的java库。是否有可用的Java库生成与字符串完全匹配的正则表达式?
String inputString = "ABC345";
String regularExpression = Something.generateRegEx(inputString);
或类似的东西。
注意:我有一个条件,我想从用户那里获取一些字符串,生成正则表达式,然后在某些数据集上匹配该模式以提取相似的模式。我已经创建了一个小实用程序,但它还不是那么可靠。此外,我正在寻找一些经过良好测试的图书馆。
编辑:
请访问txt2re.com。我想要一个执行相同功能的java库。
答案 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);