除非您以前使用過正規表達式,否則您可能不熟悉一些術語。但是,毫無疑問,您已經使用過不涉及腳本的某些正規表達式概念。
例如,您很可能使用 ? 和 * 通配符來查找硬碟上的檔案。? 通配符比對檔案名中的 0 個或 1 個字元,而 * 通配符比對零個或多個字元。像 data(\w)?\.dat 這樣的模式将查找下列檔案:
data.dat
data1.dat
data2.dat
datax.dat
dataN.dat
使用 * 字元代替 ? 字元擴大了找到的檔案的數量。data.*\.dat 比對下列所有檔案:
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
盡管這種搜尋方法很有用,但它還是有限的。通過了解 * 通配符的工作原理,引入了正規表達式所依賴的概念,但正規表達式功能更強大,而且更加靈活。
正規表達式的使用,可以通過簡單的辦法來實作強大的功能。下面先給出一個簡單的示例:

- ^ 為比對輸入字元串的開始位置。
- [0-9]+比對多個數字, [0-9] 比對單個數字,+ 比對一個或者多個。
- abc$比對字母 abc 并以 abc 結尾,$ 為比對輸入字元串的結束位置。
我們在寫使用者系統資料庫單時,隻允許使用者名包含字元、數字、下劃線和連接配接字元(-),并設定使用者名的長度,我們就可以使用以下正規表達式來設定。
以上的正規表達式可以比對 runoob、runoob1、run-oob、run_oob, 但不比對 ru,因為它包含的字母太短了,小于 3 個無法比對。也不比對 runoob$, 因為它包含特殊字元。
執行個體
比對以數字開頭,并以 abc 結尾的字元串。:
var str = "123abc";
var patt1 = /^[0-9]+abc$/;
document.write(str.match(patt1));
以下标記的文本是獲得的比對的表達式:
123abc
繼續閱讀本教程将讓您也可以自由應用這樣的代碼。
為什麼使用正規表達式?
典型的搜尋和替換操作要求您提供與預期的搜尋結果比對的确切文本。雖然這種技術對于對靜态文本執行簡單搜尋和替換任務可能已經足夠了,但它缺乏靈活性,若采用這種方法搜尋動态文本,即使不是不可能,至少也會變得很困難。
通過使用正規表達式,可以:
-
測試字元串内的模式。
例如,可以測試輸入字元串,以檢視字元串内是否出現電話号碼模式或信用卡号碼模式。這稱為資料驗證。
-
替換文本。
可以使用正規表達式來識别文檔中的特定文本,完全删除該文本或者用其他文本替換它。
-
基于模式比對從字元串中提取子字元串。
可以查找文檔内或輸入域内特定的文本。
例如,您可能需要搜尋整個網站,删除過時的材料,以及替換某些 HTML 格式标記。在這種情況下,可以使用正規表達式來确定在每個檔案中是否出現該材料或該 HTML 格式标記。此過程将受影響的檔案清單縮小到包含需要删除或更改的材料的那些檔案。然後可以使用正規表達式來删除過時的材料。最後,可以使用正規表達式來搜尋和替換标記。
發展曆史
正規表達式的"祖先"可以一直上溯至對人類神經系統如何工作的早期研究。Warren McCulloch 和 Walter Pitts 這兩位神經生理學家研究出一種數學方式來描述這些神經網絡。
1956 年, 一位叫 Stephen Kleene 的數學家在 McCulloch 和 Pitts 早期工作的基礎上,發表了一篇标題為"神經網事件的表示法"的論文,引入了正規表達式的概念。正規表達式就是用來描述他稱為"正則集的代數"的表達式,是以采用"正規表達式"這個術語。
随後,發現可以将這一工作應用于使用 Ken Thompson 的計算搜尋算法的一些早期研究,Ken Thompson 是 Unix 的主要發明人。正規表達式的第一個實用應用程式就是 Unix 中的 qed 編輯器。
如他們所說,剩下的就是衆所周知的曆史了。從那時起直至現在正規表達式都是基于文本的編輯器和搜尋工具中的一個重要部分。
應用領域
目前,正規表達式已經在很多軟體中得到廣泛的應用,包括 *nix(Linux, Unix等)、HP 等作業系統,PHP、C#、Java 等開發環境,以及很多的應用軟體中,都可以看到正規表達式的影子。
C# 正規表達式
在我們的 C# 教程中,C# 正規表達式 這一章節專門介紹了有關 C# 正規表達式的知識。
Java 正規表達式
在我們的 Java 教程中,Java 正規表達式 這一章節專門介紹了有關 Java 正規表達式的知識。
JavaScript 正規表達式
在我們的 JavaScript 教程中,JavaScript RegExp 對象 這一章節專門介紹了有關 JavaScript 正規表達式的知識,同時我們還提供了完整的 JavaScript RegExp 對象參考手冊。
Python 正規表達式
在我們的 Python 基礎教程中,Python 正規表達式 這一章節專門介紹了有關 Python 正規表達式的知識。
Ruby 正規表達式
在我們的 Ruby 教程中,Ruby 正規表達式 這一章節專門介紹了有關 Ruby 正規表達式的知識。
指令或環境 | . | [ ] | ^ | $ | \( \) | \{ \} | ? | + | | | ( ) |
vi | √ | |||||||||
Visual C++ | ||||||||||
awk | awk是支援該文法的,隻是要在指令 行加入 --posix or --re-interval參數即可,可見 man awk中的interval expression | |||||||||
sed | ||||||||||
delphi | ||||||||||
python | ||||||||||
java | √ | |||||||||
javascript | ||||||||||
php | ||||||||||
perl | ||||||||||
C# |