正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。 正則引擎主要可以分為兩大類:一種是DFA,一種是NFA。主流的正則引擎又分為3類:1. DFA引擎 DFA 引擎在線性時狀態下執行,因為它們不要求回溯(並因此它們永遠不測試相同的字符兩次)。DFA 引擎還可以確保匹配最長的可能的字符串。但是,因為 DFA 引擎只包含有限的狀態,所以它不能匹配具有反向引用的模式;並且因為它不構造顯示擴展,所以它不可以捕獲子表達式。 使用DFA引擎的程序主要有:awk、egrep、flex、lex、MySQL、Procmail等。 2. 傳統型NFA 傳統的 NFA 引擎運行所謂的“貪婪的”匹配回溯算法,以指定順序測試正則表達式的所有可能的擴展並接受第一個匹配項。因為傳統的 NFA 構造正則表達式的特定擴展以獲得成功的匹配,所以它可以捕獲子表達式匹配和匹配的反向引用。但是,因為傳統的 NFA 回溯,所以它可以訪問完全相同的狀態多次(如果通過不同的路徑到達該狀態)。因此,在最壞情況下,它的執行速度可能非常慢。因為傳統的 NFA 接受它找到的第一個匹配,所以它還可能會導致其他(可能更長)匹配未被發現。 使用傳統型NFA引擎的程序主要有:GNUEmacs,Java,ergp,less,more,.NET語言,PCRE library,Perl,PHP,Python,Ruby,sed,vi等。 3. POSIX NFA。 POSIX NFA 引擎與傳統的 NFA 引擎類似,不同的一點在於:在它們可以確保已找到了可能的最長的匹配之前,它們將繼續回溯。因此,POSIX NFA 引擎的速度慢於傳統的 NFA 引擎;並且在使用 POSIX NFA 時,您恐怕不會願意在更改回溯搜索的順序的情況下來支持較短的匹配搜索,而非較長的匹配搜索。 使用POSIX NFA引擎的程序主要有:mawk,MorticeKern Systems’ utilities,GNU Emacs(使用時可以明確指定)。 注:也有使用DFA/NFA混合的引擎:GNUawk,GNU grep/egrep,Tcl。
PCRE (PerlCompatible Regular Expressions) 包括 perl 兼容的正規表達式庫.這些在執行正規表達式模式匹配時用與Perl 5同樣的語法和語義是很有用的。 官方網址:http://www.pcre.org/ http://www.psyon.org/projects/pcre-win32/index.php(Win32版本)。
RE2是一個快速、安全和線程友好的C++正則表達式引擎。它使用DFA(有限狀態機)引擎來對模式匹配進行加速。RE2庫的語法參考附錄1。 開源網址: http://code.google.com/p/re2/wiki/Syntax(正則表達式語法)。 http://swtch.com/~rsc/regexp/regexp3.html(PCRE和RE2性能)。
REEC是一個精簡,高效的C語言正則表達式引擎,它使得C語言開發中支持正則表達式,目前已經進化到了1.2.0版本,可以說無論從功能上,還是效率都到達了很好的應用水平,該引擎除支持常用的正則標准之外,還有一些原創的特性,例如正則式的分組、模式敏感等級等等,使得正則表達式更加靈活多變。 開源網址:http://code.google.com/p/reec/
Linux正則表達式特性及BRE與ERE的區別 http://www.linuxidc.com/Linux/2014-03/99152.htm
grep使用簡明及正則表達式 http://www.linuxidc.com/Linux/2013-08/88534.htm
正則表達式的用法 http://www.linuxidc.com/Linux/2013-03/81897.htm
正則表達式之零寬斷言 http://www.linuxidc.com/Linux/2013-03/81897.htm
Linux中正則表達式與文件格式化處理命令(awk/grep/sed) http://www.linuxidc.com/Linux/2013-03/81018.htm
基礎正則表達式 http://www.linuxidc.com/Linux/2014-09/106296.htm
常用正則表達式整理 http://www.linuxidc.com/Linux/2014-10/108076.htm
C/C++中的正則表達式庫GNU Regex Library&PCRE/PCRE++ http://www.linuxidc.com/Linux/2012-01/52297.htm