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