正規表示式的子模式詳解

2022-02-03 17:17:21 字數 1712 閱讀 2658

首先,我們先看一段php**:

<?php

$time = date ("y-m-d h:i:s");

$pattern = "/\d-\d-\d \d:\d:\d/i";

if(preg_match($pattern,$time,$arr

))?>

顯示結果:

array

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

)

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

帶著這個問題,我們來看下正規表示式中的子模式。

在正規表示式中,可以使用「(」和「)」將模式中的子字串括起來,以形成乙個子模式。將子模式視為乙個整體時,那麼它就相當於乙個單個字元。

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

<?php

$time = date ("y-m-d h:i:s");

$pattern = "/(\d)-(\d)-(\d)

(\d):(\d):(\d)/i";

if(preg_match($pattern,$time,$arr

))?>

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

執行結果:

array

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

總結:我們可以使用小括號給整個匹配模式進行分組,預設情況下,每個分組會自動擁有乙個組號,規則是,從左到右,以分組的左括號為標誌,第乙個出現的分組為組號1,第二個為組號2,以此類推。其中,分組0對應整個正規表示式。

對整個正則匹配模式進行了分組以後,就可以進一步使用「向後引用」來重複搜尋前面的某個分組匹配的文字。例如:\1代表分組1匹配的文字,\2代表分組2匹配的文字等等

我們可以進一步修改下**,如下所示:

<?php

$time = date ("y-m-d h:i:s");

$pattern = "/(\d)-(\d)-(\d) (\d):(\d):(\d)/i";

$replacement = "\$time格式為:$0

替換後的格式為:\\1年\\2月\\3日 \\4時\\5分\\6秒";

print

preg_replace($pattern, $replacement, $time

);

if(preg_match($pattern,$time,$arr

))?>

注意:因為是在雙引號中,所以使用分組的時候應該使用兩個反斜槓,如:\\1,而如果在單引號中,則使用乙個反斜槓就可以了,如:\1

\\1用於捕獲分組一種的內容:2012,\\6用於捕獲分組6中的內容          

執行結果:

$time格式為:2012-06-23 03:30:31替換後的格式為:2023年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)

正規表示式 子模式

import re string this is a love1ly girl lovel1y pattern re.compile r lovely ret pattern.search string print ret.group group 是返回匹配的整個表示式的字串 string 額呵呵床...

php正規表示式 子模式的應用

在php的正規表示式的語法中,我們曾經學習過 模式單元 在php的正規表示式中模式單元分為兩類,即 總模式和子模式 總模式 整個正規表示式的整體就是乙個總模式 子模式 整個正規表示式中用括號包起來的部分就叫做子模式 如下 整個正規表示式就是乙個總模式 而用顏色標記的部分就是子模式 有時候我們使用正規...

PHP正規表示式的逆向引用與子模式

mixed preg replace mixed pattern,mixed replacement,mixed subject int limit 在 subject 中搜尋 pattern 模式的匹配項並替換為 replacement。如果指定了 limit,則僅替換 limit 個匹配,如果省...