讀古今文學網 > 精通正則表達式(第3版) > 正則表達式的平衡法則 >

正則表達式的平衡法則

Regex Balancing Act

好的正則表達式必須在這些方面求得平衡:

●只匹配期望的文本,排除不期望的文本。

●必須易於控制和理解。

●如果使用NFA引擎,必須保證效率(如果能夠匹配,必須很快地返回匹配結果,如果不能匹配,應該在盡可能短的時間內報告匹配失敗)。

這些方面常常是與具體文本相關的。如果我只使用命令行,只需要快速地grep某些東西,可能不會過分關心匹配的準確性,通常也不會花太多精力來調校。我不在乎多花點時間來手工排查,因為我能夠迅速地在輸出中找到自己需要的內容。但是,如果處理重要的程序,就需要花費時間精力來保證正確性:如果需要,正則表達式也可能很複雜。這些因素都需要權衡。

即使使用同樣的程序,效率也是與具體文本相關的。如果是 NFA,用「^-(display|geometry|cemap|…|quick24|random|raw)$」之類長長的正則表達式來檢驗命令行參數的效率就很低,因為多選分支過多,但如果它只用於檢驗命令行參數(可能只是在程序開始的時候運行若干次),即使所需時間比正常的長100倍也不要緊,因為這時候效率並不是問題。但是,如果要逐行檢查很大的文件,低效率的程序運行起來會讓你痛苦不堪。