認識Regex
如果原來沒有使用過Regex,那麼可能對這個術語和概念會不太熟悉。不過,它們並不是您想象的那麼新奇。
請回想一下在硬碟上是如何尋找檔案的。您肯定會使用 ? 和 * 字元來協助尋找您正尋找的檔案。? 字元匹配檔案名稱中的單個字元,而 * 則匹配一個或多個字元。一個如 'data?.dat' 的模式可以找到下述檔案:
data1.dat
data2.dat
datax.dat
dataN.dat
如果使用 * 字元代替 ? 字元,則將擴大找到的檔案數量。'data*.dat' 可以匹配下述所有檔案名稱:
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
儘管這種搜尋檔案的方法肯定很有用,但也十分有限。? 和 * 萬用字元的有限能力可以使你對Regex能做什麼有一個概念,不過Regex的功能更強大,也更靈活。
Regex的早期起源
Regex的“祖先”可以一直上溯至對人類神經系統如何工作的早期研究。Warren McCulloch 和 Walter Pitts 這兩位神經生理學家研究出一種數學方式來描述這些神經網路。
1956 年, 一位叫 Stephen Kleene 的美國數學家在 McCulloch 和 Pitts 早期工作的基礎上,發表了一篇標題為“神經網事件的標記法”的論文,引入了Regex的概念。Regex就是用來描述他稱為“正則集的代數”的運算式,因此採用“Regex”這個術語。
隨後,發現可以將這一工作應用於使用Ken Thompson 的計算搜尋演算法的一些早期研究,Ken Thompson是Unix 的主要發明人。Regex的第一個實用應用程式就是 Unix 中的qed 編輯器。
如他們所說,剩下的就是眾所周知的曆史了。從那時起直至現在Regex都是基於文本的編輯器和搜尋工具中的一個重要部分。
使用Regex
在典型的搜尋和替換操作中,必須提供要尋找的確切文字。這種技術對於靜態文本中的簡單搜尋和替換任務可能足夠了,但是由於它缺乏靈活性,因此在搜尋動態文本時就有困難了,甚至是不可能的。
使用Regex,就可以:
- 測試字串的某個模式。例如,可以對一個輸入字串進行測試,看在該字串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為資料有效性驗證。
- 替換文本。可以在文檔中使用一個Regex來標識特定文字,然後可以全部將其刪除,或者替換為別的文字。
- 根據模式比對從字串中提取一個子字串。可以用來在文本或輸入欄位中尋找特定文字。
例如,如果需要搜尋整個 web 網站來刪除某些過時的材料並替換某些HTML 格式化標記,則可以使用Regex對每個檔案進行測試,看在該檔案中是否存在所要尋找的材料或 HTML 格式化標記。用這個方法,就可以將受影響的檔案範圍縮小到包含要刪除或更改的材料的那些檔案。然後可以使用Regex來刪除過時的材料,最後,可以再次使用Regex來尋找並替換那些需要替換的標記。