正則表達式 入門

正則表達式入門

  1. 概念

    • 正則表達式(Regular Expression),實際上也叫規則表達式,它本質上是一個字符串爲何叫正則 表達式,可能第一個翻譯的人以爲這樣更好聽吧。正則表達式是一個語言規則,就像編程語言的面向對象這個特性同樣,不一樣的語言它的實現不同,可是都有共同的特色,有繼承,多態等等,更像是網絡協議,他只是一個標準。正則表達式

    • 它就相似數學表達式,好比" {x|x<10,x>0}" ,這個字符串,表明一個大小爲0-10的數字。其實這就是正則表達式,只不過正則表達式採用和數學表達式不一樣的字符,和不一樣的字符組合規則,前面這句字符串用正則表達式來表達就是"[0-10]",表明相同的意思:一個大小在0-10之間的數字。編程

      正則表達式稱爲一個模式-pattern,它不只僅能夠表示一個數字,還能夠表示一個字符,兩個字符,一個字符串等。好比pattern1這個模式,能夠表明這個意思,」一個首字母爲a,a的後面能夠跟任意個字符,匹配任意個字符後,最後一個字符爲b「,我能夠給出」afffb","alkjb","assssb"這三個字符串,他們都是符合模式的意義的,這個pattern1模式的實際正則表達式爲「^a.*?b$"。網絡

    • 正則表達式的做用是,解決這樣的問題,從一個字符數量很長,甚至包含上萬個字符串找出其中某段符合一個正則表達式模式的子字符串。這個被找的字符串必定具備某些特殊的格式,好比讓你找一本書的章節字符串,這個字符串的特色是什麼?他通常是這個模樣:"章節n」,由章節兩個字,加上一個數字,章節1,章節2等等等,用一個正則表達式來表達就是「^章節/d$"。若是讓匹配的字符串不具有某些特殊的格式那麼這種匹配是沒法進行,也是沒有不少意義的。編程語言

  2. 語法

    • 若是你理解了上面的概念,那麼你應該知道正則表達式,首先它本質上是一個字符串,其次它是用來匹配字符串的。這個字符的組成包括兩個部分:普通字符+特殊字符,特殊字符也叫元字符(諸如^,*,?這樣的字符),。一個模式,還能夠包括子模式,子模式用「(pattern)」圈出。也能夠說一個正則表達式是由組多個子模式組成的。spa

      • 普通字符

        是什麼:普通字符好理解,就是普通可打印(字母數字下劃線),不可打印字符,\n \r 諸如換行,回車這樣的字符。翻譯

        做用是:若是正則表達式的字符串出現一個普通字符,就說明,這個位置必定要匹配一個如出一轍的字符,好比」^a.*?$",雖然你如今只知道a這個普通字母的含義,由於還沒講特殊字符,可是它的位置你能夠看出,它在. * ?這個字符串的前面,因此這個普通字符的含義是:在. * ?的前面必定會匹配一個字符a對象

      • 特殊字符

        特殊字符不少,我只介紹最重要的幾類,所有的特殊字符及其做用能夠在維基百科搜索到。繼承

        1. 數量限定類字符串

          用法:這類字符是修飾字符,放在須要修飾的字符後面,只能修飾一個字符。含義是規定這個被修飾的字符能夠連續出現的次數。會限制最多匹配連續的幾個字符,加了修飾後,模式會盡量地匹配符合這個pattern連續出現字符次數最多的字符串。若是在數量限定修飾符後面加一個字符「?」就會使該pattern儘量地匹配該字符連續出現次數最少的字符串。這就是貪心和非貪心匹配數學

          字符 含義
          {n} n爲數字,表示被修飾的字符至少要出現n次
          {n,} 表示被修飾的字符至少要出現n次
          {n,m} 表示出現的字符數量在n-m之間,可是因爲自己是貪心的,因此會優先匹配數量爲m的
          + 表示匹配一次或者屢次,等於{1,}
          * 表示修飾的字符能夠匹配0次或者屢次
          ? 1. 非貪心量化,修飾其餘數量限定符,使其變得不貪心。2. 修飾普通字符,表明匹配0或者1次

          例子:pattern=「a+b」,這個模式能夠匹配上 「ab」,「aaab」,均可以若是一個字符串包括「ab aaab」兩個子串,他會優先匹配第二個子串aaab。

        2. 定位類符

          用法:這種字符不是修飾符,而是位置斷定符,一個字符表明某個特殊的位置,這種特殊位置由四個,字符串開始處,字符串結束處,單詞開始處,單詞結束處。須要注意的是,一個位置在這裏意義等同於一個字符

          字符 含義
          ^ 表示字符串的開始處(換行符的後面)
          $ 字符串的結尾處(換行符的前面)
          \b 單詞的開始處,
          \B 單詞的結尾處

          例子:pattern=」^a+b$",給出一個須要匹配的字符串「adaaaabs \n aaaab \n sdsf"那麼這個模式會匹配中間那個字符串aaaab,而不會匹配第一個字符串中的aaaab子串,由於第一個字符串的子串中aaaab的第一個a的前面沒有字符串開始位置,」^符號須要匹配一個開始位置,而第二個前面有一個換行符\n,因此這裏具有開始位置,同理$字符匹配也是這樣。

        3. 匹配類符

          用法:這類符就是「()」小括號中間爲一個子模式,一個模式中能夠含有任意多個子模式,實際匹配中,能夠看成小括號不存在。子模式存在的意義是,能夠被向後引用和做爲匹配結果返回。能夠做爲匹配結果返回的意思是,這個模式匹配完後,會把()內子模式匹配的這一部分單獨提取出來做爲匹配結果返回,向後引用意思是,匹配結果能夠做爲模式條件寫在模式之中。一個模式可能具備許多個子模式,每個子模式都會產生一個匹配結果,能夠以子模式在整個模式中從左到右的順序來引用,格式爲:\n,的值是從1開始的整數 \1 表示引用第一個子模式的引用,\2表示引用第二個子模式。

          例子:pattern=「^a+(s+)d(f+)\1\2$ ",它能夠匹配一個字符串爲「aaassdfssf」,^和$就不說了,a+表示匹配至少1個的連續個a,s+,f+也是同理,d是普通字符且沒有修飾符,表示單獨匹配一個字符d,\1表示引用前面的第一個子串s+,匹配一個和s+同樣的子串,也就是ss,\2引用第二個子模式,匹配一個f。

  3. 總結

    以上就是正則表達式,最重要的內容,掌握了這些,基本對正則表達式就有了基本清晰的概念,剩餘的元字符就本身搜着學咯。

相關文章
相關標籤/搜索