正規表達式是對字元串(包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為“元字元”))操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字元串”,這個“規則字元串”用來表達對字元串的一種過濾邏輯。正規表達式是一種文本模式,模式描述在搜尋文本時要比對的一個或多個字元串。
正規表達式的“鼻祖”或許可一直追溯到科學家對人類神經系統工作原理的早期研究。美國紐澤西州的Warren McCulloch和出生在美國底特律的Walter Pitts這兩位神經生理方面的科學家,研究出了一種用數學方式來描述神經網絡的新方法,他們創造性地将神經系統中的神經元描述成了小而簡單的自動控制元,進而作出了一項偉大的工作革新。
在1951 年,一位名叫Stephen Kleene的數學科學家,他在Warren McCulloch和Walter Pitts早期工作的基礎之上,發表了一篇題目是《神經網事件的表示法》的論文,利用稱之為正則集合的數學符号來描述此模型,引入了正規表達式的概念。正規表達式被作為用來描述其稱之為“正則集的代數”的一種表達式,因而采用了“正規表達式”這個術語。
之後一段時間,人們發現可以将這一工作成果應用于其他方面。Ken Thompson就把這一成果應用于計算搜尋算法的一些早期研究,Ken Thompson是 Unix的主要發明人,也就是大名鼎鼎的Unix之父。Unix之父将此符号系統引入編輯器QED,然後是Unix上的編輯器ed,并最終引入grep。Jeffrey Friedl 在其著作《Mastering Regular Expressions (2nd edition)》(中文版譯作:精通正規表達式,已出到第三版)中對此作了進一步闡述講解,如果你希望更多了解正規表達式理論和曆史,推薦你看看這本書。
自此以後,正規表達式被廣泛地應用到各種UNIX或類似于UNIX的工具中,如大家熟知的Perl。Perl的正規表達式源自于Henry Spencer編寫的regex,之後已演化成了pcre(Perl相容正規表達式Perl Compatible Regular Expressions),pcre是一個由Philip Hazel開發的、為很多現代工具所使用的庫。正規表達式的第一個實用應用程式即為Unix中的 qed 編輯器。
然後,正規表達式在各種計算機語言或各種應用領域得到了廣大的應用和發展,演變成為計算機技術森林中的一隻形神美麗且聲音動聽的百靈鳥。
以上是關于正規表達式的起源和發展的曆史描述,如今正規表達式在基于文本的編輯器和搜尋工具中依然占據着一個非常重要的地位。
在最近的六十年中,正規表達式逐漸從模糊而深奧的數學概念,發展成為在計算機各類工具和軟體包應用中的主要功能。不僅僅衆多UNIX工具支援正規表達式,近二十年來,在WINDOWS的陣營下,正規表達式的思想和應用在大部分 Windows 開發者工具包中得到支援和嵌入應用!從正則式在Microsoft Visual Basic 6 或 Microsoft VBScript到.NET Framework中的探索和發展,WINDOWS系列産品對正規表達式的支援發展到無與倫比的高度,幾乎所有 Microsoft 開發者和所有.NET語言都可以使用正規表達式。如果你是一位接觸計算機語言的工作者,那麼你會在主流作業系統(*nix[Linux, Unix等]、Windows、HP、BeOS等)、主流的開發語言(delphi、Scala、PHP、C#、Java、C++、Objective-c、Swift、VB、Javascript、Ruby以及Python等)、數以億萬計的各種應用軟體中,都可以看到正規表達式優美的舞姿。