欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

迷人的正則表達(dá)式

   正則表達(dá)式,又稱正規(guī)表示式、正規(guī)表示法、正規(guī)表達(dá)式、規(guī)則表達(dá)式、常規(guī)表示法(英語(yǔ):Regular Expression,在代碼中常簡(jiǎn)寫為regex、regexp或RE),計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來(lái)檢索、替換那些符合某個(gè)模式的文本?!S基百科 

專注于為中小企業(yè)提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)安定免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

   正則表達(dá)式是計(jì)算機(jī)智能的一種體現(xiàn),她能讓我們?cè)诜彪s的計(jì)算機(jī)文本之中找到我們最想要的東西,在她那規(guī)則而又朦朧的面紗之下是一張優(yōu)雅而又調(diào)皮的面孔,對(duì)于初入Linux大門的男人來(lái)說(shuō),無(wú)不拜倒在她的石榴裙下,而本文所要做的就是如何俘獲她的芳心。

一、了解她的身世

在1956 年,美國(guó)的一位名叫Stephen Kleene的數(shù)學(xué)科學(xué)家,他在Warren McCulloch和Walter Pitts早期工作的基礎(chǔ)之上,發(fā)表了一篇題目是《神經(jīng)網(wǎng)事件的表示法》的論文,利用稱之為正則集合的數(shù)學(xué)符號(hào)來(lái)描述此模型,引入了正則表達(dá)式的概念。正則表達(dá)式被作為用來(lái)描述其稱之為“正則集的代數(shù)”的一種表達(dá)式,因而采用了“正則表達(dá)式”這個(gè)術(shù)語(yǔ)。之后一段時(shí)間,人們發(fā)現(xiàn)可以將這一工作成果應(yīng)用于其他方面。Ken Thompson就把這一成果應(yīng)用于計(jì)算搜索算法的一些早期研究,Ken Thompson是 Unix的主要發(fā)明人,也就是大名鼎鼎的Unix之父。Unix之父將此符號(hào)系統(tǒng)引入編輯器QED,然后是Unix上的編輯器ed,并最終引入grep。近二十年來(lái),在WINDOW的陣營(yíng)下,正則表達(dá)式的思想和應(yīng)用在大部分 Windows 開(kāi)發(fā)者工具包中得到支持和嵌入應(yīng)用!目前主流的開(kāi)發(fā)語(yǔ)言(PHP、C#、Java、C++、VB、Javascript、Ruby以及python等)、數(shù)以億萬(wàn)計(jì)的各種應(yīng)用軟件中,都可以看到正則表達(dá)式優(yōu)美的舞姿。

二、揭開(kāi)她的面紗

   好了,繼上次inode之后我們又遇到了一個(gè)讓人無(wú)從下手的東西,但是不管怎么說(shuō)我們還得學(xué)她,所以先來(lái)看看正則表達(dá)式都有些什么吧:

   基本正則表達(dá)式元字符:

        字符匹配:

            .  :匹配任意單個(gè)字符

            []: 匹配指定范圍內(nèi)的任意單個(gè)字符

            [^]: 匹配指定范圍外的任意單個(gè)字符

[0-9], [[:digit:]], [^0-9], [^[:digit:]]

            [a-z], [[:lower:]]

            [A-Z], [[:upper:]]

            [[:space:]]

            [[:punct:]]

            [0-9a-zA-Z], [[:alnum:]]

            [a-zA-Z], [[:alpha:]]

            次數(shù)匹配:在期望匹配字符后面提供一個(gè)控制符,用于表達(dá)匹配其前面字符指定的次數(shù)

            *  : 任意長(zhǎng)度,表示0次、1次或多次;

            .*: 任意長(zhǎng)度的任意字符

            工作于貪婪模式

            \?:0次或1次;表示其左側(cè)字符可有可無(wú)

            \+: 1次或多次;表示其左側(cè)字符至少出現(xiàn)1次;

            \{m\}:m次;表示其左側(cè)字符精確出現(xiàn)m次;

            \{m,n\}:至少m次,至多n次;

            \{0,n\}:至多n次;

            \{m,\}:至少m次;

        位置錨定:

            ^: 錨定行首

            $: 錨定行尾

            ^$: 匹配空白行;

        單詞錨定:由非特殊字符組成的連續(xù)的字符串

            \< :錨定詞首,也可用\b

            \> :錨定詞尾,也可以用\b

            \<PATTERN\>:匹配PATTERN能匹配到的整個(gè)單詞

            分組:\(\)

                \1,\2...\n:用于表示引用前面分組的內(nèi)容


    

   擴(kuò)展的正則表達(dá)式:

        字符匹配:

            .

            []

            [^]

        次數(shù)匹配:

            *: 任意次

            ?:0或1次

            +: 至少1次

            {m}:精確匹配m次;

            {m,n}:至少m次,至多次;

            {m,}:至少m次;

            {0,n}:至多次;

        位置錨定:

            ^

            $

            \<, \b

            \>, \b

            分組:

            ()

            引用:\1, \2, ...

            或者:

            a|b:a或者b

            或者兩側(cè)的所有內(nèi)容;

三、強(qiáng)吻她

   額,我知道走到這一步可能有點(diǎn)出乎大家的意料,不過(guò)要知道強(qiáng)吻一個(gè)女孩兒是最快得到答復(fù)的一種方式,不是嗎?OK,想要強(qiáng)吻我們就需要手、嘴并用,好了來(lái)看看我們能用的手和嘴都有哪些吧。我們?cè)诹私馀裆硎赖臅r(shí)候知道我們的Unix之父引入了grep,在Unix的grep家族中包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的擴(kuò)展,支持更多的元字符,fgrep就是把所有的字母都看作單詞,也就是說(shuō),正則表達(dá)式中的元字符表示回其自身的字面意義,不再特殊。

   好了,我們的手嘴已經(jīng)就緒開(kāi)始行動(dòng)吧:

   我們循序漸進(jìn)先來(lái)個(gè)簡(jiǎn)單動(dòng)作-->查找/proc/meminfo中以s|S開(kāi)頭的行

迷人的正則表達(dá)式

   我們一只手的用法grep [OPTIONS] PATTERN [FILE...],其中^為錨定行首,[sS]表示只能選擇這個(gè)集合之中s和S兩個(gè)字母。

   我們?cè)賮?lái)一個(gè)-->找出/etc/passwd文件中的一位或者兩位數(shù),為了讓我們的動(dòng)作不那么蒼白,我們給她點(diǎn)顏色看看

   

迷人的正則表達(dá)式

   --color選項(xiàng)表示以彩色形式顯示搜索出來(lái)的內(nèi)容,\<\>這兩個(gè)組合起來(lái)可以確定一個(gè)單詞,[0-9]表示一個(gè)數(shù)字范圍在0-9之中選,而\?表示其前面的字符可出現(xiàn)一次或者不出現(xiàn)。

   我們的動(dòng)作越來(lái)越熟練了-->我們給出幾個(gè)句子,看看如何使用分組

迷人的正則表達(dá)式

   我們輸出了四個(gè)句子,其中有兩個(gè)前后很像,我們用分組和引用把它們找出來(lái)了:\(l..e\).*\1,l..e表示以l開(kāi)頭中間根兩個(gè)任意字母,然后把這個(gè)看成一個(gè)整體,.*表示任意長(zhǎng)度的字符,\1表示引用前面使用\(\)括起來(lái)的內(nèi)容。

   如果要一直使用帶顏色輸出我們可以通過(guò)定義別名的形式為以后少點(diǎn)麻煩:

        [root@bogon ~]# alias grep='grep --color'

   接下來(lái)我們來(lái)點(diǎn)有難度的-->取出一個(gè)路徑的路徑名

迷人的正則表達(dá)式

   grep -o表示只顯示被選中內(nèi)容,這里我們用到了兩次grep,第一次[^/]表示最后匹配到不以/結(jié)尾的字符,/.*/就表示兩個(gè)分割符之間的內(nèi)容了,如果我們想要得到類似dirname命令那樣的格式可以使用

[root@bogon ~]# echo '/etc/rc.d/init.d/' | grep -o '/.*[^/]' | grep -o '/.*/' | grep -o '/.*[^/]' 大家可以去試一下。

   我們不能一直使用一只手,該清楚另一只了-->取出一個(gè)路徑的基名

迷人的正則表達(dá)式

    egrep等于grep -E,都代表是擴(kuò)展的正則表達(dá)式,+表示其前面的[^/]出現(xiàn)一次或者多次,?我們前面解釋過(guò)了,$表示錨定行尾,在結(jié)尾處帶有/的路徑名,我們可以使用cut切一下就可以了。

   我們?cè)賮?lái)鞏固一下成果:   

迷人的正則表達(dá)式

迷人的正則表達(dá)式

   第一個(gè)我們的目的是在字符串中找到前后名稱一致而后綴不一致的內(nèi)容;第二個(gè)我們的目的是在字符串中找到符合郵箱格式的內(nèi)容,大家自己體會(huì)一下吧,我就不再解釋了。為了防止成為“三只手”,我就不再介紹fgrep了,它其實(shí)很簡(jiǎn)單,就是字符本來(lái)樣子的匹配。經(jīng)過(guò)這三個(gè)強(qiáng)勁的“泡妞”步驟我想你應(yīng)該可以俘獲她的芳心了,但是如果想把這位狡猾的女神娶回家還需要各位更加深入的努力啊,知己知彼方能百戰(zhàn)不殆嘛!

   好了希望這篇文章能夠給您帶來(lái)幫助,敬請(qǐng)各位看官提出此文章的不當(dāng)之處,拜謝!

   PS:grep,egrep,fgrep的使用方法各位使用man命令看一下吧,本文不再贅述。

   [root@bogon ~]# echo -e 'adsfqw@163.com\nqwqe@qq;com\nFreedom@gmail.com.com\nadfa.msn.com' | egrep --color '[[:alnum:]]+@[[:alnum:]]+\.[[:alpha:]]+$' --> 修正提取郵箱的BUG

網(wǎng)站題目:迷人的正則表達(dá)式
文章路徑:http://chinadenli.net/article30/gjseso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)動(dòng)態(tài)網(wǎng)站、軟件開(kāi)發(fā)、ChatGPT網(wǎng)站策劃、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)