2012-07-30 135 views
0

我发现很多以字符串作为用户输入并为字符串创建正则表达式的网站。但找不到任何相同的Java库。是否有任何可用的Java库生成正确匹配字符串的正则表达式?用于从输入字符串生成正则表达式的Java库

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

或类似的东西。

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

编辑:

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

+2

你的问题不明确。输出是什么? – kosa 2012-07-30 14:19:22

+0

你只是想逃避输入?看到这个问题:http://stackoverflow.com/questions/60160/how-to-escape-text-for-regular-expression-in-java和有关'报价'方法的答案。 – david 2012-07-30 14:21:49

+0

我曾经写过一个这样做的库。它总是返回'。*' – Dikei 2012-07-30 14:24:19

回答

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 = { [email protected] } 

,那么你可以写一个基本的编译器遍历字符,同时检查它们的类型, 伪:

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 
+0

感谢您的详细解答。所以,现在还没有这样的库。为了创建这样的库,需要在库中包含已知正则表达式的数据库。仪式?感谢您的伪代码,实际上我的当前运行代码(解决方法)使用相同的逻辑来生成正则表达式。 – Saurabh 2012-07-31 04:42:27

-1

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

。如果您想建立从一个正则表达式是从用户输入的模式对象,使用标准的Java API(java.util.regex.*)这样一个相反:

Pattern p = Pattern.compile(inputString); 
+0

他想从给定的字符串获得正则表达式。 – 2012-07-30 14:21:40

+0

@ErhanBagdemir是的,那是什么问题? – kgautron 2012-07-30 14:25:11

+0

@MikeSamuel好的,我补充一点。 – kgautron 2012-07-30 14:25:23

2

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

+0

我刚刚使用了Pattern.quote(String),输出是\ QABC123 \ E – Saurabh 2012-07-30 14:29:47

+1

...是的?那有什么问题? – 2012-07-30 14:31:36

+0

@Saurabh:这是一个问题吗?你的意见是什么? – 2012-07-30 14:32:01