深入分析Regex的子模式

來源:互聯網
上載者:User
在Regex中,可以使用“(”和“)”將模式中的子字串括起來,以形成一個子模式。將子模式視為一個整體時,那麼它就相當於一個單個字元。下面我們就來詳細瞭解下子模式

首先,我們先看一段PHP代碼:

<?php  $time = date ("Y-m-d H:i:s");  $pattern = "/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/i";   if(preg_match($pattern,$time,$arr)){  echo "<pre>";  print_r($arr);      echo "</pre>";  }?>

顯示結果:

Array(  [0] => 2012-06-23 03:08:45)

有沒有注意到,顯示的結果只有一條資料,即符合匹配模式的時間格式,那如果只有一條記錄的話,為什麼還要用數組儲存呢?直接使用字串儲存不是更好?

帶著這個問題,我們來看下Regex中的子模式。

在Regex中,可以使用“(”和“)”將模式中的子字串括起來,以形成一個子模式。將子模式視為一個整體時,那麼它就相當於一個單個字元。

比如,我們將以上的代碼稍微修改下,改成如下:

<?php  $time = date ("Y-m-d H:i:s");  $pattern = "/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/i";   if(preg_match($pattern,$time,$arr)){  echo "<pre>";  print_r($arr);      echo "</pre>";  }?>

注意:我只修改了$pattern,在匹配模式中,使用了括弧()

執行結果:

Array(  [0] => 2012-06-23 03:19:23  [1] => 2012  [2] => 06  [3] => 23  [4] => 03  [5] => 19  [6] => 23)

總結:我們可以使用小括弧給整個匹配模式進行分組,預設情況下,每個分組會自動擁有一個組號,規則是,從左至右,以分組的左括弧為標誌,第一個出現的分組為組號1,第二個為組號2,以此類推。其中,分組0對應整個Regex。
對整個正則匹配模式進行了分組以後,就可以進一步使用“反向參考”來重複搜尋前面的某個分組匹配的文本。例如:\1代表分組1匹配的文本,\2代表分組2匹配的文本等等
我們可以進一步修改下代碼,如下所示:

<?php  $time = date ("Y-m-d H:i:s");  $pattern = "/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/i";  $replacement = "\$time格式為:$0<BR>替換後的格式為:\\1年\\2月\\3日 \\4時\\5分\\6秒";  print preg_replace($pattern, $replacement, $time);  if(preg_match($pattern,$time,$arr)){    echo "<pre>";    print_r($arr);        echo "</pre>";  }?>

注意:

因為是在雙引號中,所以使用分組的時候應該使用兩個反斜線,如:\\1,而如果在單引號中,則使用一個反斜線就可以了,如:\1
\\1用於捕獲分組一種的內容:2012,\\6用於捕獲分組6中的內容          
執行結果:

$time格式為:2012-06-23 03:30:31替換後的格式為:2012年06月23日 03時30分31秒Array(  [0] => 2012-06-23 03:30:31  [1] => 2012  [2] => 06  [3] => 23  [4] => 03  [5] => 30  [6] => 31)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.