2013-08-19 123 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