2013-08-19 127 views
1

如何编写正则表达式来决定正则表达式是合法还是非法?如何编写正则表达式来匹配法律正则表达式?

例如正则表达式以*开头是非法的。所以正则表达式匹配法正则表达式可能是[^ \ *] + [\ s \ S] *。

+1

请谷歌术语“分析器”和“语法”。你不应该使用正则表达式来解析大多数语言。试图用自己来解析正则表达式就像是从鲨鱼中出现的鲨鱼。 –

+0

[是否可以使regexp匹配所有有效的正则表达式?](http://stackoverflow.com/q/2906848/139010)和[是否有正则表达式来检测有效的正则表达式?]( http://stackoverflow.com/q/172303/139010)。 –

+0

Thx,这非常有用! – charmpeach

回答

3

正则表达式是为了匹配常规语言,因为正则表达式不是,所以你不能实现这一点。您应该使用Parser来执行此任务。

但是,支持正则表达式的编程语言已经具有内置解析器,您可以通过尝试使用要验证的模式实例化正则表达式来确定正则表达式是否有效。

例如,在JavaScript中,你可以这样做:

function isValidRegex(regex) { 
    try { 
     new RegExp(regex) 
    } 
    catch (e) { 
     return false; 
    } 

    return true; 
} 

isValidRegex('*a'); //false 
0

没有使用递归(例如PCRE)正则表达式,这是不可能的。所有可能的正则表达式的集合不是regular language

+0

thx。我试图做一个文件搜索和正则表达式是由输入字段给出的,所以在我用它来搜索之前,无法确定正则表达式是否合法?有没有语法正则表达式必须遵守? – charmpeach