迷人的正則表達式-創(chuàng)新互聯

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

成都創(chuàng)新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站建設、網站設計、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的遂溪網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

  正則表達式是計算機智能的一種體現,她能讓我們在繁雜的計算機文本之中找到我們最想要的東西,在她那規(guī)則而又朦朧的面紗之下是一張優(yōu)雅而又調皮的面孔,對于初入Linux大門的男人來說,無不拜倒在她的石榴裙下,而本文所要做的就是如何俘獲她的芳心。

一、了解她的身世

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

二、揭開她的面紗

  好了,繼上次inode之后我們又遇到了一個讓人無從下手的東西,但是不管怎么說我們還得學她,所以先來看看正則表達式都有些什么吧:

  基本正則表達式元字符:

        字符匹配:

            .  :匹配任意單個字符

            []: 匹配指定范圍內的任意單個字符

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

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

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

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

            [[:space:]]

            [[:punct:]]

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

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

            次數匹配:在期望匹配字符后面提供一個控制符,用于表達匹配其前面字符指定的次數

            *  : 任意長度,表示0次、1次或多次;

            .*: 任意長度的任意字符

            工作于貪婪模式

            \?:0次或1次;表示其左側字符可有可無

            \+: 1次或多次;表示其左側字符至少出現1次;

            \{m\}:m次;表示其左側字符精確出現m次;

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

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

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

        位置錨定:

            ^: 錨定行首

            $: 錨定行尾

            ^$: 匹配空白行;

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

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

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

            \<PATTERN\>:匹配PATTERN能匹配到的整個單詞

            分組:\(\)

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

  擴展的正則表達式:

        字符匹配:

            .

            []

            [^]

        次數匹配:

            *: 任意次

            ?:0或1次

            +: 至少1次

            {m}:精確匹配m次;

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

            {m,}:至少m次;

            {0,n}:至多次;

        位置錨定:

            ^

            $

            \<, \b

            \>, \b

            分組:

            ()

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

            或者:

            a|b:a或者b

            或者兩側的所有內容;

三、強吻她

  額,我知道走到這一步可能有點出乎大家的意料,不過要知道強吻一個女孩兒是最快得到答復的一種方式,不是嗎?OK,想要強吻我們就需要手、嘴并用,好了來看看我們能用的手和嘴都有哪些吧。我們在了解女神身世的時候知道我們的Unix之父引入了grep,在Unix的grep家族中包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的擴展,支持更多的元字符,fgrep就是把所有的字母都看作單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,不再特殊。

  好了,我們的手嘴已經就緒開始行動吧:

  我們循序漸進先來個簡單動作-->查找/proc/meminfo中以s|S開頭的行

迷人的正則表達式

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

  我們再來一個-->找出/etc/passwd文件中的一位或者兩位數,為了讓我們的動作不那么蒼白,我們給她點顏色看看

迷人的正則表達式

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

  我們的動作越來越熟練了-->我們給出幾個句子,看看如何使用分組

迷人的正則表達式

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

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

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

  接下來我們來點有難度的-->取出一個路徑的路徑名

迷人的正則表達式

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

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

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

迷人的正則表達式

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

  我們再來鞏固一下成果:

迷人的正則表達式

迷人的正則表達式

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

  好了希望這篇文章能夠給您帶來幫助,敬請各位看官提出此文章的不當之處,拜謝!

  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

另外有需要云服務器可以了解下創(chuàng)新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文標題:迷人的正則表達式-創(chuàng)新互聯
當前鏈接:http://muchs.cn/article40/csjgho.html

成都網站建設公司_創(chuàng)新互聯,為您提供企業(yè)建站、網站內鏈、電子商務、App設計網站收錄、品牌網站制作

廣告

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

手機網站建設