前言
如果你從事服務端的開發(fā)邻耕,相比你一定聽說過正則表達式,最常見的應該就是對要提交表單的字段進行正確性判斷。比如注冊的時候檢測手機號位數(shù)和號段是否正確等予权,如下圖:
上述功能都是通過正則表達式來實現(xiàn)的些楣,只要短短的一行表達式脂凶,而不用if...else if...if...else...一大堆邏輯判斷的代碼宪睹。
正則表達式的作用不只如此,本文會詳細介紹的...
簡介
正則表達式(Regular Expression)是一種文本模式蚕钦,使用單個字符串來描述亭病、匹配一系列匹配某個句法規(guī)則的字符串。
似曾相識嘶居?
在日常使用計算機的時候罪帖,你可能會遇到一些類似于正則表達式的搜索技巧,比如通配符邮屁?和*來查找你硬盤上的文件整袁。比如,搜索config?.dat你可能會搜到這樣的結(jié)果
config1.dat
config2.dat
config3.dat
而使用config*.dat來搜過的話你會送到類似這樣的文件:
configa.dat
configapple.dat
configserver.dat
(⊙v⊙)嗯~就是這種感覺佑吝,短短的幾個神秘字符葬项,就能起到很神奇的作用
** 注意:但是上面?和*的語法不是真正的正則的語法迹蛤,只是類似而已 **
稍微搜了一下正則君的身世验残,發(fā)現(xiàn)還不得了呢(@ο@)
發(fā)展歷史
正則表達式的"祖先"可以一直上溯至對人類神經(jīng)系統(tǒng)如何工作的早期研究壶谒。Warren McCulloch 和 Walter Pitts 這兩位神經(jīng)生理學家研究出一種數(shù)學方式來描述這些神經(jīng)網(wǎng)絡。
1956 年, 一位叫 Stephen Kleene 的數(shù)學家在 McCulloch 和 Pitts 早期工作的基礎上,發(fā)表了一篇標題為"神經(jīng)網(wǎng)事件的表示法"的論文狈醉,引入了正則表達式的概念。正則表達式就是用來描述他稱為"正則集的代數(shù)"的表達式箕母,因此采用"正則表達式"這個術(shù)語吓妆。
隨后,發(fā)現(xiàn)可以將這一工作應用于使用 Ken Thompson 的計算搜索算法的一些早期研究宣渗,Ken Thompson 是 Unix 的主要發(fā)明人抖所。正則表達式的第一個實用應用程序就是 Unix 中的 qed 編輯器。
如他們所說痕囱,剩下的就是眾所周知的歷史了田轧。從那時起直至現(xiàn)在正則表達式都是基于文本的編輯器和搜索工具中的一個重要部分。
看了正則君的身世鞍恢,是不是覺得他挺酷的~嗯確實傻粘,但是他可不是看臉吃飯的(長得挺嚇人的...),他的常見外貌是這個樣子的:
^.+@.+\\..+$
上面這一小坨符號就是正則君帮掉,不要懷疑是你的瀏覽器亂碼弦悉!沒錯!正則表達式長得就是這個樣子蟆炊!
好吧稽莉,雖然長得嚇人,但是它會很有用的涩搓,而且會寫正則表達式還是個很裝X的事情呢~呵呵
正則表達式 - 語法
正則表達式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為"元字符")組成的文字模式污秆。模式描述在搜索文本時要匹配的一個或多個字符串后室。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配混狠。
上面的這段話的意思主要有三點
1.正則是一種字符模式(特定組合)的表達式
2.正則有兩種字符
- 普通字符(a-z)
- 特殊字符(元字符)
3.正則是幾中類型字符組合的一種** 模板 **
** 對啦岸霹,總之正則就是一個模板 **
除了上述兩種字符之外,我們還需要了解“限定符”将饺、“定位符”等更具有邏輯意義的字符贡避,以便施展正則判斷的魔力
普通字符
普通字符分為可打印字符和非打印字符∮杌。可打印字符比較好理解刮吧,非打印字符是很么呢?看了下面這張表你就明白啦掖蛤。比較常見的就是“/n"換行字符啦
特殊字符(元字符)
特殊字符杀捻,就是那些沒有直觀意思的字符,或者說他有著特殊的意義蚓庭,例如.txt"中的致讥,是表示任何字符串的意思。
許多元字符要求在試圖匹配它們時特別對待器赞。若要匹配這些特殊字符垢袱,必須首先使字符"轉(zhuǎn)義",即港柜,將反斜杠字符 () 放在它們前面请契。下表列出了正則表達式中的特殊字符:
限定符
限定符用來指定正則表達式的一個給定組件必須要出現(xiàn)多少次才能滿足匹配。有*或+或?或{n}或{n,}或{n,m}共6種夏醉。
正則表達式的限定符有:
*** 待續(xù).... ***