探祕正則表達式

       今天有個同事問起,php中的正則語法爲何和perl中的正則語法如此的相似,是誰兼容誰?到底正則是什麼?因此有了這篇文章php

       在咱們的平常工做中,不管是在php中用正則匹配字符串,仍是nginx用正則重寫url,仍是在vi中查找字符,老是,用處不少也很方便。mysql

       那到底什麼是正則表達式?爲何各個應用中正則的語法大都相同?下面咱們來講一下這幾個問題nginx

       歷史由來:最初的正則表達式出現於理論計算機科學的自動控制理論和形式化語言理論中。在這些領域中有對計算(自動控制)的模型和對形式化語言描述與分類的研究。1940年,Warren McCulloch與Walter Pitts將神經系統中的神經元描述成小而簡單的自動控制元。1950年代,數學家斯蒂芬·科爾·克萊尼利用稱之爲「正則集合」的數學符號來描述此模型。肯·湯普遜將此符號系統引入編輯器QED,而後是Unix上的編輯器ed,並最終引入grep。自此,正則表達式被普遍地使用於各類Unix或者相似Unix的工具,例如Perl。Perl的正則表達式源自於Henry Spencer寫的regex,它已經演化成了pcre(Perl兼容正則表達式,Perl Compatible Regular Expressions),一個由Philip Hazel開發的,爲不少現代工具所使用的庫。正則表達式

         你們都明白了吧,咱們在ed、grep、perl中使用的正則都是在這幾個程序中獨立實現的,而在咱們的nginx、php、mysql等各類語言系統或應用中都是引用pcre庫函數,同時pcre的庫函數也支持posix協議,方便外部應用的統一調用,這也是咱們爲何安裝這些軟件的時候機器上要安裝pcre軟件包。算法

        總而言之,正則表達式是用必定語法的字符串來匹配符合規則的字符串的一種思惟方式,不管採用哪一種實現的引擎,內部採用何種算法,都是爲了更方便更快速的查找到咱們須要的東西,至因而獨立實現仍是引用寫好的庫函數更不是那麼的重要了。至於語法的大同小異,也是因爲各類應用下不一樣的狀況下具體定製的,知道就能夠了。sql

相關文章
相關標籤/搜索