1

有许多网站将字符串作为用户输入,并允许您从字符串片段创建正则表达式 (regex)。

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

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

或类似的东西。

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

编辑 :

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

4

4 回答 4

3

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

于 2012-07-30T14:24:12.087 回答
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
于 2012-07-30T15:06:21.613 回答
0

基于遗传算法的 java 库,如 regex++ url:https ://github.com/MaLeLabTs/RegexGenerator可用于相同目的。

于 2019-05-10T03:14:25.283 回答
-1

如果您想要找到与给定字符串匹配的正则表达式,那么这是没有意义的,因为它的数量是无限的。

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

Pattern p = Pattern.compile(inputString);
于 2012-07-30T14:20:44.447 回答