正規表示式,又稱規則表達式。 (英文:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),電腦科學的一個概念。正規表通常被用來檢索、取代那些符合某個模式(規則)的文字。
正規表示式是對字串運算的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。
許多程式設計語言都支援利用正規表示式進行字串運算。例如,在Perl中就內建了一個功能強大的正規表示式引擎。正規表示式這個概念最初是由Unix中的工具軟體(例如sed和grep)普及開的。正規表示式通常縮寫成“regex”,單數有regexp、regex,複數有regexps、regexes、regexen。
第一個正規表示式實例!
實例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>PHP中文网教程(php.sn)</title> </head> <body> <script> var str = "abc123def"; var patt1 = /[0-9]+/; document.write(str.match(patt1)); </script> </body> </html>
執行實例 »
點擊 "執行實例" 按鈕查看線上實例
提示:我們的正規表示式教學將幫助您學習從初級到高級的正規表示式知識。如果你有任何疑問,請前往PHP中文網正規表示式社群提出你的問題,會有熱心網友為你解答。
正規表示式特點
彈性、邏輯性和功能性非常強;
可以快速地用極簡單的方式達到字串的複雜控制。
對於剛接觸的人來說,比較晦澀難懂。
由於正規表示式主要應用物件是文本,因此它在各種文字編輯器場合都有應用,小到著名編輯器EditPlus,大到Microsoft Word、Visual Studio等大型編輯器,都可以使用正規表示式來處理文字內容。
目的
給定一個正規表示式和另一個字串,我們可以達到以下的目的:
給定的字串是否符合正規表示式的過濾邏輯(稱為「匹配」)
可以透過正規表示式,從字串中取得我們想要的特定部分。
正規引擎
正規引擎主要可以分為兩大類:
- ##一種是DFA,
- 一種是NFA。
POSIX NFA 引擎與傳統的 NFA 引擎類似,不同的一點在於:在它們可以確保已找到了可能的最長的匹配之前,它們將繼續回溯。因此,POSIX NFA 引擎的速度慢於傳統的 NFA 引擎;並且在使用 POSIX NFA 時,您恐怕不會願意在更改回溯搜索的順序的情況下來支持較短的匹配搜索,而非較長的匹配搜索。
使用DFA引擎的程式主要有:
awk,egrep,flex,lex,MySQL,Procmail等;
使用傳統型NFA引擎的程式主要有:
GNU Emacs,Java,ergp,less,more,.NET语言,PCRE library,Perl,PHP,Python,Ruby,sed,vi;
使用POSIX NFA引擎的程式主要有:
mawk,Mortice Kern Systems’ utilities,GNU Emacs(使用时可以明确指定);
也有使用DFA/NFA混合的引擎:
GNU awk,GNU grep/egrep,Tcl。
舉例簡單說明NFA與DFA工作的差異:
例如有字串this is yansen's blog,正規表達式為/ya(msen|nsen|nsem)/ (不要在乎表達式怎麼樣,這裡只是為了說明引擎間的工作區別)。 NFA運作方式如下,先在字串中查找 y 然後匹配其後是否為 a ,如果是 a 則繼續,查找其後是否為 m 如果不是則匹配其後是否為 n (此時淘汰msen選擇支)。
然後繼續看其後是否依序為 s,e,接著測試是否為 n ,是 n 則匹配成功,不是則測試是否為 m 。為什麼是 m ?因為 NFA 工作方式是以正規表示式為標準,反覆測試字串,這樣同樣一個字串有可能被反覆測試了很多次!
而DFA則不是如此,DFA會從 this 中 t 開始依次查找 y,定位到 y ,已知其後為a,則查看表達式是否有 a ,此處正好有a 。然後字串a 後為n ,DFA依序測試表達式,此時 msen 不符合要求淘汰。 nsen 和 nsem 符合要求,然後DFA依序檢查字串,偵測到sen 中的 n 時只有nsen 分支符合,則匹配成功!
由此可以看出來,兩種引擎的工作方式完全不同,一個(NFA)以表達式為主導,一個(DFA)以文本為主導!一般而論,DFA引擎則搜尋更快一些!但NFA以表達式為主導,反而更容易操縱,因此一般程式設計師更偏好NFA引擎!兩種引擎各有所長,而真正的引用則取決與你的需要以及所使用的語言。
本正規表示式教學手冊涵蓋的內容
本正規表示式教學涵蓋所有正規表示式基礎和進階知識,包含了正規表示式語法、正規表示式元字元、正規則表達式運算子優先權、正規表示式符合規則等等。
提示:本教學的每一章都包含了許多正規表示式實例,您可以直接點擊 "執行實例" 按鈕線上查看結果。這些範例將幫助您更好地學習理解正規表示式。
其它正規表示式相關學習參考資源
除了本頁右邊的知識拓展,也為大家精選了以下資源
#最新章節
- 正则表达式 - 示例 2016-10-18
- 正则表达式 - 匹配规则 2016-10-18
- 正则表达式 - 运算符优先级 2016-10-18
- 正则表达式 - 元字符 2016-10-18
- 正则表达式 - 语法 2016-10-18
- 正则表达式 - 简介 2016-10-18
- 正则表达式 - 教程 2016-10-18
相關課程
- 電腦網路知識集合 2022-09-30
- 布爾教育HTTP協議視頻教程 2022-04-14
- 布爾教育正規表達式視頻教程 2022-04-18
- 布林教育設計模式影片教學 2022-04-21
- 電腦網路概述—程式設計師必須掌握的基礎知識 2021-11-22
- 程式設計師入門必備教學—HTTP協定詳解 2021-11-19
- 一小時全面入門HTTP協定—web開發必備 2021-11-26
- 90分鐘搞定Web基礎(網路協定|HTTP|Web伺服器) 2021-12-10