糊言亂語

          志未半斤, 才無八兩. 有苦有樂, 糊涂過活。
          posts - 25, comments - 7, trackbacks - 0, articles - 42
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          正則表達式的由來

          Posted on 2007-11-07 23:02 Stanley Sun 閱讀(430) 評論(1)  編輯  收藏

          一般在有著1年半以上的程序員基本上都是知道這個厲害的東西的,它對字符串處理的能力可以說是生猛無比。雖然大家都在使用(有時候在開發的Code中,有時候是在我們自己心愛的Editor里),但是我相信大部分人對這里禽獸的了解程度只是停留在會用的層次上。下面我對它進行一下詳細的說明。

          正則表達式的“祖先”可以一直上溯至對人類神經系統如何工作的早期研究。Warren McCulloch 和 Walter Pitts 這兩位神經生理學家研究出一種數學方式來描述這些神經網絡。

          1956 年, 一位叫 Stephen Kleene 的美國數學家在 McCulloch 和 Pitts 早期工作的基礎上,發表了一篇標題為“神經網事件的表示法”的論文,引入了正則表達式的概念。正則表達式就是用來描述他稱為“正則集的代數”的表達式,因此采用“正則表達式”這個術語。

          隨后,發現可以將這一工作應用于使用Ken Thompson 的計算搜索算法的一些早期研究,Ken Thompson是Unix 的主要發明人。正則表達式的第一個實用應用程序就是 Unix 中的qed 編輯器。

          如他們所說,剩下的就是眾所周知的歷史了。從那時起直至現在正則表達式都是基于文本的編輯器和搜索工具中的一個重要部分。

          使用正則表達式
          在典型的搜索和替換操作中,必須提供要查找的確切文字。這種技術對于靜態文本中的簡單搜索和替換任務可能足夠了,但是由于它缺乏靈活性,因此在搜索動態文本時就有困難了,甚至是不可能的。

          使用正則表達式,就可以:

          測試字符串的某個模式。例如,可以對一個輸入字符串進行測試,看在該字符串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為數據有效性驗證。
          替換文本。可以在文檔中使用一個正則表達式來標識特定文字,然后可以全部將其刪除,或者替換為別的文字。
          根據模式匹配從字符串中提取一個子字符串。可以用來在文本或輸入字段中查找特定文字。
          例如,如果需要搜索整個 web 站點來刪除某些過時的材料并替換某些HTML 格式化標記,則可以使用正則表達式對每個文件進行測試,看在該文件中是否存在所要查找的材料或 HTML 格式化標記。用這個方法,就可以將受影響的文件范圍縮小到包含要刪除或更改的材料的那些文件。然后可以使用正則表達式來刪除過時的材料,最后,可以再次使用正則表達式來查找并替換那些需要替換的標記。

          許多種工具都支持正則表達式(文本編輯器、文字處理軟件、系統工具、數據庫引擎,等等),不過,要想充分挖掘正則表達式的能力,還是應當將它作為編程語言的一部分。例如Java、JScript、Visual Basic、VBScript、JavaScript、ECMAScript、C、C++、C#、elisp、Perl、Python、Tcl、Ruby、PHP、sed和awk。事實上,在一些用上述語言編寫的程序中,正則表達式扮演了極其重要的角色。
          正則表達式能夠得到眾多語言和工具的支持是有原因的:它們極其有用。從較低的層面上來說,正則表達式描述的是一串文本(a chunk of text)的特征。大家可以用它來驗證用戶輸入的數據,或者也可以用它來檢索大量的文本。從較高的層面上來說,正則表達式容許用戶掌控他們自己的數據——控制這些數據,讓它們為自己服務。掌握正則表達式,就是掌握自己的數據。

          可見它的重要性,難怪每款編輯器和編程語言不同程度的實現了它,使得普通用戶和開發人員受益不淺。


          評論

          # re: 正則表達式的由來  回復  更多評論   

          2012-10-23 10:44 by jianchi
          正則表達式真是難用啊,不過功能真的強大

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 清水县| 萝北县| 姚安县| 鄂州市| 三门县| 出国| 郴州市| 平山县| 正宁县| 方正县| 信阳市| 洱源县| 河西区| 阿尔山市| 芜湖县| 晋江市| 绥棱县| 保定市| 卢湾区| 大宁县| 房山区| 轮台县| 佳木斯市| 竹北市| 郴州市| 霍林郭勒市| 义乌市| 黄骅市| 县级市| 微山县| 柏乡县| 凤凰县| 泽州县| 进贤县| 宾川县| 宁晋县| 保德县| 富锦市| 桃江县| 邵东县| 桂林市|