【php】Regex

來源:互聯網
上載者:User

標籤:自己   blog   找女朋友   編輯功能   函數   color   底線   替換   表示   

一、生活當中的Regex:

  a)Notepad++、word等這些具有編輯功能的軟體,都具有一個尋找、替換的功能,這個功能,其實就屬於正則模式的一種匹配、替換;包括windows當中可以實現的尋找,也是應用的正則模式比對;包括一些搜尋、匹配的軟體也是使用的正則模式規則來寫的!

二、PHP當中的正則:

  a)定義:它是用於對使用一種模式,對一段字串進行的尋找、替換、匹配、分割的作用

  三、正則模式:

  a)其實就是一段特殊的字串!我們可以使用這一段特殊的字串對另一段字串進行的一系列操作!

  b)模式:

    i.單身模式:找女朋友,學習,充實自己!

    ii. 戀愛模式:此刻仉浩焱和他的女朋友在熱戀期,此時他們的智商都為0

    iii.婚姻模式:此刻仉浩焱和他的女朋友結婚啦,從此過上了幸福的生活!

    iv.偵查模式:此時他媳婦的智商僅次於愛因斯坦,她會從仉浩焱的蛛絲馬跡發現海波是不是偷腥了~~(頭髮絲兒、身上是否有香水味、是否有口紅…)

四、正則的分類:

  a)POSIX規則:

    i.已棄用,(功能、使用頻率)比較落後,因此棄用

  b)PCRE規則:

    i.正在使用!

五、如何來使用Regex?

  a)正則的定界符:

  b)原子:

  c)元字元:

  d)模式修正符:

  e)配合正則函數來進行使用!

    i.Preg_match()          匹配一次

    ii.Preg_match_all()      匹配所有

六、定界符:

  a)和定義字串一樣,我們定義正則也需要使用正則的定界符

  b)“/正則模式/” ,正則當中的定界符可以是除了字母、數字、具有特殊含義符號之外的所有內容,都可以作為定界符

  c)注意:通常情況下,我們都會使用雙斜線作為正則模式的定界符,這是一個不成文的規定!

七、 原子:是正則模式當中最小的單位!
  a)一般字元:
    1.a-z:之中的所有小寫字母,都是一個原子
    2.A-Z:之中的所有大寫字母,都是一個原子
    3.0-9:之間的所有阿拉伯數字,都屬於一個原子
  b)原子表:
    1.[]:一個方括弧當中所有的內容之間的關係都是或的關係,而且一個原子表永遠代表一個原子!
    2.[abcdfg]:可以寫單個原子
    3.[a-z]:任一一個小寫字母
    4.[A-Z]:任一一個大寫字母
    5.[0-9]:任一一個阿拉伯數字
    6.[a-g]:任一一個從a-g之間的小寫字母
    7.原子表中如果有一個 ‘-’代表了一個範圍!
  c)特殊的逸出字元:
    1.\d:相當於[0-9],代表了任意一個阿拉伯數字
    2.\D:代表了任一一個除了阿拉伯數位內容
    3.\w:代表了任意一個字母、數字、底線的內容
    4.\W:代表了除了任意的字母、數字、底線的內容
  d)非列印字元:
    1.\r:斷行符號
    2.\n:換行
    3.\t:定位字元
  e)正則當中擁有特殊含義的字元:
    1.*、.、+、?、\,當我們想要使用正則模式去匹配這些具有特殊含義的字元時,我們需要在它前方加上逸出字元 \
八、元字元:在Regex當中,那些擁有特殊含義的字元,就是元字元
  a)[]:原子表,特點:原子表中的原子之間的關係是或,一個原子表代表一個原子
  b){n}:匹配次數:花括弧之前的原子必須出現n次
  c){n,}:匹配次數:花括弧之前的原子至少出現n次,沒有上限
  d){n,m}:匹配次數:花括弧之前的原子至少出現n次,最多出現m次
  e).:代表任意一個原子
  f)*:匹配次數:代表*號之前的原子是任意長度,相當於{0,}
  g)+:匹配次數:代表+號之前的原子是至少一次,沒有上限,相當於{1,}
  h)?:匹配次數:代表?號之前的原子可有可無,相當於{0,1}
  i)^:兩層含義
    i.如果將其放在正則模式左定界符後,則代表以^之後的原子開頭
    ii.如果將其放在原子表中最開頭,[^0-9],則代表原子表中的內容取反
  j)$:如果將其放在正則模式右定界符前,則代表以$符之前的原子結尾
    i.注意:如果配合使用上箭頭^和貨幣符號$,則代表精確匹配,代表我們匹配的字元源必須符合他們中間的正則模式的內容!
  k)():三層含義:
    i.提升優先順序
    ii.子儲存
    iii.重複使用模式單元
  l)|:或者

九、 關於正則模式的特殊運用:
  a)貪婪匹配

 1 // 定義字元源 2 $stu = ‘#仉浩焱##許超##張舒##大嘴##小花##偉哥#‘; 3  4 // 定義正則模式(這屬於貪婪匹配) 5 $patt = "/#.*#/"; 6 var_dump($res); 7  8 //結果 9 array (size=1)10   0 => 11     array (size=1)12       0 => string ‘#仉浩焱##許超##張舒##大嘴##小花##偉哥#‘ (length=51)13 14 // 定義正則模式(拒絕貪婪匹配)15 $patt = "/#.*?#/";16 17 // 使用正則函數來進行匹配18 preg_match_all($patt,$stu,$res);19 var_dump($res);20 21 //結果22 array (size=1)23   0 => 24     array (size=6)25       0 => string ‘#仉浩焱#‘ (length=11)26       1 => string ‘#許超#‘ (length=8)27       2 => string ‘#張舒#‘ (length=8)28       3 => string ‘#大嘴#‘ (length=8)29       4 => string ‘#小花#‘ (length=8)30       5 => string ‘#偉哥#‘ (length=8)

  b) 子儲存
  c)重複使用模式單元
十、正則當中的函數:
  a)Preg_match()、執行一個Regex匹配

 1 //定義字元源 2 $str = "abcdefgabcdefg"; 3  4 //定義正則模式 5 $patt = "/a/"; 6  7 echo preg_match($patt,$str,$res); 8 var_dump($res);             9 //array (size=1)10 //0 => string ‘a‘ (length=1)                

  b) Preg_match_all()、 執行一個全域Regex匹配

 1 //定義字元源 2 $str = "abcdefgabcdefg"; 3  4 //定義正則模式 5 $patt = "/a/"; 6  7 //匹配所有 8 preg_match_all($patt,$str,$res); 9 var_dump($res);10 11 //array (size=1)12     0 => 13       array (size=2)14       0 => string ‘a‘ (length=1)15       1 => string ‘a‘ (length=1)

  c) Preg_grep(); 返回匹配模式的數組條目
  d)Preg_replace();執行一個Regex的搜尋和替換
  e)Preg_split();通過一個Regex分隔字串
十一、正則當中的模式修正符:
  a)i:不區分大小寫

 1 //模式修正符i:表示正則匹配不區分大小寫 2 $str = "abcdefgABCDEFG"; 3 $patt = "/[a-z]/i"; 4 preg_match_all($patt,$str,$res); 5 var_dump($res); 6  7 //結果 8 array (size=1) 9   0 => 10     array (size=14)11       0 => string ‘a‘ (length=1)12       1 => string ‘b‘ (length=1)13       2 => string ‘c‘ (length=1)14       3 => string ‘d‘ (length=1)15       4 => string ‘e‘ (length=1)16       5 => string ‘f‘ (length=1)17       6 => string ‘g‘ (length=1)18       7 => string ‘A‘ (length=1)19       8 => string ‘B‘ (length=1)20       9 => string ‘C‘ (length=1)21       10 => string ‘D‘ (length=1)22       11 => string ‘E‘ (length=1)23       12 => string ‘F‘ (length=1)24       13 => string ‘G‘ (length=1)

  b) s:表示忽略分行符號

//模式修正符s:表示正則匹配忽略分行符號$str = "        <li>張三</li>        <li>李四        </li>        <li>王五</li>        ";//不加模式修正符s$patt = "/<li>.*?<\/li>/";preg_match_all($patt,$str,$res);var_dump($res);//結果array (size=1)  0 =>     array (size=2)      0 => string ‘<li>張三</li>‘ (length=15)      1 => string ‘<li>王五</li>‘ (length=15)//加模式修正符s$patt = "/<li>.*?<\/li>/s";preg_match_all($patt,$str,$res);var_dump($res);//結果array (size=1)  0 =>     array (size=3)      0 => string ‘<li>張三</li>‘ (length=15)      1 => string ‘<li>李四            </li>‘ (length=20)      2 => string ‘<li>王五</li>‘ (length=15)

  c) U:表示拒絕貪婪匹配

 1 //模式修正符U:表示正則拒絕貪婪匹配 2 $str = "#海波##鴻澤##柏岩##景飛#"; 3 $patt = "/#.*#/U"; 4 preg_match_all($patt,$str,$res); 5 var_dump($res); 6  7 //結果 8 array (size=1) 9   0 => 10     array (size=4)11       0 => string ‘#海波#‘ (length=8)12       1 => string ‘#鴻澤#‘ (length=8)13       2 => string ‘#柏岩#‘ (length=8)14       3 => string ‘#景飛#‘ (length=8)

十二、 關於正則和字串函數:
  a)正則函數就相當於大炮:
  b)字串函數就相當於弓箭:

【php】Regex

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.