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