成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

正則表達(dá)式不要背

yibinnn / 3446人閱讀

摘要:正則表達(dá)式一直是困擾很多程序員的一門技術(shù),當(dāng)然也包括曾經(jīng)的我。正則表達(dá)式的基本組成元素可以分為字符和元字符。字符很好理解,就是基礎(chǔ)的計(jì)算機(jī)字符編碼,通常正則表達(dá)式里面使用的就是數(shù)字英文字母。在正則表達(dá)式里,集合的定義方式是使用中括號(hào)和。

正則表達(dá)式一直是困擾很多程序員的一門技術(shù),當(dāng)然也包括曾經(jīng)的我。大多數(shù)時(shí)候我們?cè)陂_發(fā)過程中要用到某些正則表達(dá)式的時(shí)候,都會(huì)打開谷歌或百度直接搜索然后拷貝粘貼。當(dāng)下一次再遇到相同問題的時(shí)候,同樣的場(chǎng)景又再來一遍。作為一門用途很廣的技術(shù),我相信深入理解正則表達(dá)式并能融會(huì)貫通是值得的。所以,希望這篇文章能幫助大家理清思路,搞懂正則表達(dá)式各種符號(hào)之間的內(nèi)在聯(lián)系,形成知識(shí)體系,當(dāng)下次再遇到正則表達(dá)式的時(shí)候可以不借助搜索引擎,自己解決。

正則表達(dá)式到底是什么

正則表達(dá)式(Regular Expression)其實(shí)就是一門工具,目的是為了字符串模式匹配,從而實(shí)現(xiàn)搜索和替換功能。它起源于上個(gè)20世紀(jì)50年代科學(xué)家在數(shù)學(xué)領(lǐng)域做的一些研究工作,后來才被引入到計(jì)算機(jī)領(lǐng)域中。從它的命名我們可以知道,它是一種用來描述規(guī)則的表達(dá)式。而它的底層原理也十分簡(jiǎn)單,就是使用狀態(tài)機(jī)的思想進(jìn)行模式匹配。大家可以利用regexper.com這個(gè)工具很好地可視化自己寫的正則表達(dá)式:

/dw+/這個(gè)正則生成的狀態(tài)機(jī)圖:

對(duì)于具體的算法實(shí)現(xiàn),大家如果感興趣可以閱讀《算法導(dǎo)論》。

從字符出發(fā)

我們學(xué)習(xí)一個(gè)系統(tǒng)化的知識(shí),一定要從其基礎(chǔ)構(gòu)成來了解。正則表達(dá)式的基本組成元素可以分為:字符和元字符。字符很好理解,就是基礎(chǔ)的計(jì)算機(jī)字符編碼,通常正則表達(dá)式里面使用的就是數(shù)字、英文字母。而元字符,也被稱為特殊字符,是一些用來表示特殊語義的字符。如^表示非,|表示或等。利用這些元字符,才能構(gòu)造出強(qiáng)大的表達(dá)式模式(pattern)。接下來,我們就來從這些基本單位出發(fā),來學(xué)習(xí)一下如何構(gòu)建正則表達(dá)式。

單個(gè)字符

最簡(jiǎn)單的正則表達(dá)式可以由簡(jiǎn)單的數(shù)字和字母組成,沒有特殊的語義,純粹就是一一對(duì)應(yīng)的關(guān)系。如想在"apple"這個(gè)單詞里找到‘a(chǎn)"這個(gè)字符,就直接用/a/這個(gè)正則就可以了。

但是如果想要匹配特殊字符的話,就得請(qǐng)出我們第一個(gè)元字符****, 它是轉(zhuǎn)義字符字符,顧名思義,就是讓其后續(xù)的字符失去其本來的含義。舉個(gè)例子:

我想匹配*這個(gè)符號(hào),由于*這個(gè)符號(hào)本身是個(gè)特殊字符,所以我要利用轉(zhuǎn)義元字符來讓它失去其本來的含義:

/*/

如果本來這個(gè)字符不是特殊字符,使用轉(zhuǎn)義符號(hào)就會(huì)讓它擁有特殊的含義。我們常常需要匹配一些特殊字符,比如空格,制表符,回車,換行等, 而這些就需要我們使用轉(zhuǎn)義字符來匹配。為了便于記憶,我整理了下面這個(gè)表格,并附上記憶方式:

特殊字符 正則表達(dá)式 記憶方式
換行符 new line
換頁符 f form feed
回車符 return
空白符 s space
制表符 tab
垂直制表符 v vertical tab
回退符 [] backspace,之所以使用[]符號(hào)是避免和重復(fù)

多個(gè)字符

單個(gè)字符的映射關(guān)系是一對(duì)一的,即正則表達(dá)式的被用來篩選匹配的字符只有一個(gè)。而這顯然是不夠的,只要引入集合區(qū)間和通配符的方式就可以實(shí)現(xiàn)一對(duì)多的匹配了。

在正則表達(dá)式里,集合的定義方式是使用中括號(hào)[]。如/[123]/這個(gè)正則就能同時(shí)匹配1,2,3三個(gè)字符。那如果我想匹配所有的數(shù)字怎么辦呢?從0寫到9顯然太過低效,所以元字符-就可以用來表示區(qū)間范圍,利用/[0-9]/就能匹配所有的數(shù)字, /[a-z]/則可以匹配所有的英文小寫字母。

即便有了集合和區(qū)間的定義方式,如果要同時(shí)匹配多個(gè)字符也還是要一一列舉,這是低效的。所以在正則表達(dá)式里衍生了一批用來同時(shí)匹配多個(gè)字符的簡(jiǎn)便正則表達(dá)式:

匹配區(qū)間 正則表達(dá)式 記憶方式
除了換行符之外的任何字符 . 句號(hào),除了句子結(jié)束符
單個(gè)數(shù)字, [0-9] d digit
除了[0-9] D not digit
包括下劃線在內(nèi)的單個(gè)字符,[A-Za-z0-9_] w word
非單字字符 W not word
匹配空白字符,包括空格、制表符、換頁符和換行符 s space
匹配非空白字符 S not space

循環(huán)與重復(fù)

一對(duì)一和一對(duì)多的字符匹配都講完了。接下來,就該介紹如何同時(shí)匹配多個(gè)字符。要實(shí)現(xiàn)多個(gè)字符的匹配我們只要多次循環(huán),重復(fù)使用我們的之前的正則規(guī)則就可以了。那么根據(jù)循環(huán)次數(shù)的多與少,我們可以分為0次,1次,多次,特定次。

0 | 1

元字符"); 最后,歡迎大家關(guān)注我的公眾號(hào),一起學(xué)習(xí)交流。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/6649.html

相關(guān)文章

  • 正則系列——JavaScript正則達(dá)式入門心得

    摘要:對(duì)前端來說,使用的場(chǎng)景不多,但是像微信端的對(duì)話系統(tǒng)的表情包,就使用到了一個(gè)特定的規(guī)則。我是一個(gè)前端,工作年了,現(xiàn)在失業(yè),想進(jìn)入騰訊工作,這是我的聯(lián)系方式這個(gè)正則雖 我發(fā)現(xiàn)有個(gè)別字符被這個(gè)編輯器給刷掉了,但是灰色區(qū)域顯示正常,以灰色區(qū)域代碼為準(zhǔn) 什么玩意? 在我剛開始學(xué)習(xí)編程的時(shí)候,就聽過正則了,也聽說正則很牛逼,懂正則的更牛逼。但是苦于沒有人指點(diǎn),也沒有使用正則的場(chǎng)景,自己看教程又懵逼...

    DevWiki 評(píng)論0 收藏0
  • 平時(shí)積累的前端資源,持續(xù)更新中。。。

    本文收集學(xué)習(xí)過程中使用到的資源。 持續(xù)更新中…… 項(xiàng)目地址 https://github.com/abc-club/f... 目錄 vue react react-native Weex typescript Taro nodejs 常用庫 css js es6 移動(dòng)端 微信公眾號(hào) 小程序 webpack GraphQL 性能與監(jiān)控 高質(zhì)文章 趨勢(shì) 動(dòng)效 數(shù)據(jù)結(jié)構(gòu)與算法 js core 代碼規(guī)范...

    acrazing 評(píng)論0 收藏0
  • Vue面試中,經(jīng)常會(huì)被問到的面試題/Vue知識(shí)點(diǎn)整理

    摘要:可以在該鉤子中進(jìn)一步地更改狀態(tài),不會(huì)觸發(fā)附加的重渲染過程。我工作中只用到,對(duì)和不怎么熟與的區(qū)別相同點(diǎn)都支持指令內(nèi)置指令和自定義指令都支持過濾器內(nèi)置過濾器和自定義過濾器都支持雙向數(shù)據(jù)綁定都不支持低端瀏覽器。 看看面試題,只是為了查漏補(bǔ)缺,看看自己那些方面還不懂。切記不要以為背了面試題,就萬事大吉了,最好是理解背后的原理,這樣面試的時(shí)候才能侃侃而談。不然,稍微有水平的面試官一看就能看出,是...

    mengbo 評(píng)論0 收藏0
  • Javascript數(shù)據(jù)類型與基本運(yùn)算

    摘要:常見的關(guān)鍵字有等等常見的保留字有等等本文可能會(huì)直接用到的有定義一個(gè)變量在瀏覽器控制臺(tái)或后臺(tái)終端輸出一個(gè)值在瀏覽器彈窗輸出一個(gè)值基本數(shù)據(jù)類型基本類型包括數(shù)值,字符串,,和布爾型。 標(biāo)識(shí)符命名規(guī)則 對(duì)于變量名,鍵值對(duì)中的鍵名應(yīng)滿足如下要求: 開頭必須是字母、下劃線(_)或美元符號(hào)($) 除了開頭以外的字符也可以是數(shù)字 不可以是關(guān)鍵字和保留字 最好不要和全局變量/函數(shù)同名,會(huì)把原有變量/函...

    jimhs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<