正則表達式是對字符串操作的一種邏輯公式。
正則表達式,又稱規(guī)則表達式,是一種文本模式,通常用來檢索、替換和控制文本。主要包括a 到 z 的字母以及一些特殊的元字符。
正則表達式的應(yīng)用范圍非常之廣泛,最初是由Unix普及開來的,后來在廣泛運用于Scala 、PHP、C# 、Java、C++ 、Objective-c、Perl 、Swift、VBScript 、Javascript、Ruby 以及Python等等。
學(xué)習(xí)正則表達式,實際上是在學(xué)習(xí)一種十分靈活的邏輯思維,聯(lián)系通過簡單快速的方法達到對于字符串的控制。也許跟如此多的程序語言掛鉤看起來有些生澀難懂,但是它也能夠很輕松地在Microsoft Word上實現(xiàn)。
本書從簡單的文本匹配開始,循序漸進地介紹了很多復(fù)雜內(nèi)容,其中包括回溯引用、條件性求值和前后查找,等等。通過簡單的描述和精彩的實例幫助讀者系統(tǒng)全面地掌握正則表達式,并運用它們?nèi)ソ鉀Q實際問題。諸位必須知道正則表達式是程序員手中一把威力無比強大的武器,學(xué)會它,可以用來處理大部分的程序語言。
無論你在使用何種語言,都可以備一本《正則表達式》隨時查閱。
學(xué)完本教程,進行實戰(zhàn)練習(xí),才算真正掌握哦:點擊開始實戰(zhàn)
正則表達式的“鼻祖”或許可一直追溯到科學(xué)家對人類神經(jīng)系統(tǒng)工作原理的早期研究。美國新澤西州的Warren McCulloch和出生在美國底特律的Walter Pitts這兩位神經(jīng)生理方面的科學(xué)家,研究出了一種用數(shù)學(xué)方式來描述神經(jīng)網(wǎng)絡(luò)的新方法,他們創(chuàng)造性地將神經(jīng)系統(tǒng)中的神經(jīng)元描述成了小而簡單的自動控制元,從而作出了一項偉大的工作革新。
在1956 年,一位名叫Stephen Kleene的數(shù)學(xué)科學(xué)家發(fā)表了一篇題目是《神經(jīng)網(wǎng)事件的表示法》的論文,利用稱之為正則集合的數(shù)學(xué)符號來描述此模型,引入了正則表達式的概念。正則表達式被作為用來描述其稱之為“正則集的代數(shù)”的一種表達式,因而采用了“正則表達式”這個術(shù)語。
之后一段時間,人們發(fā)現(xiàn)可以將這一工作成果應(yīng)用于其他方面。Ken Thompson就把這一成果應(yīng)用于計算搜索算法的一些早期研究,Ken Thompson是 Unix的主要發(fā)明人,也就是大名鼎鼎的Unix之父。Unix之父將此符號系統(tǒng)引入編輯器QED,然后是Unix上的編輯器ed,并最終引入grep。Jeffrey Friedl 在其著作當(dāng)中對此作了進一步闡述講解。
然后,正則表達式在各種計算機語言或各種應(yīng)用領(lǐng)域得到了廣大的應(yīng)用和發(fā)展,并且不斷演變成如今更加方便使用的形式。
正則表達式的引擎主要分為兩大類:一種是DFA,一種是NFA,后來又出現(xiàn)了兩者的合并類
POSIX NFA。DFA引擎在線性時狀態(tài)下執(zhí)行,可以確保匹配最長的可能的字符串。但是,因為 DFA 引擎只包含有限的狀態(tài),所以它不能匹配具有反向引用的模式;并且因為它不構(gòu)造顯示擴展,所以它不可以捕獲子表達式。NFA引擎以 特定擴展以獲得成功的匹配,所以它可以捕獲子表達式匹配和匹配的反向引用,但是執(zhí)行速度可能因此被拖慢。
POSIX NFA 引擎與傳統(tǒng)的 NFA 引擎類似,不同點在于除非已經(jīng)找到了可能的最長的匹配,否則它將一直回溯。因此,POSIX NFA 引擎的速度慢于傳統(tǒng)的 NFA 引擎。
NFA以表達式為主導(dǎo),DFA以文本為主導(dǎo)。一般而論,DFA引擎則搜索更快一些,但是NFA以表達式為主導(dǎo),反而更容易操縱,因此一般程序員更偏愛NFA引擎。兩種引擎各有所長,在實戰(zhàn)的時候請根據(jù)自己的需要選擇適合的正則表達式引擎。