亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

yibinnn / 3504人閱讀

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

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

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

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

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

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

從字符出發(fā)

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

單個字符

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

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

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

/*/

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

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

多個字符

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

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

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

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

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

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

0 | 1

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

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/6649.html

相關(guān)文章

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

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

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

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

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

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

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

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

    jimhs 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<