正規表示式
一、正規表示式語法規則
描述一類字串的特徵,然後通過這類特徵可以配合一些特定的函式,來完成對字串更加複雜的一系列操作。
普通字元和特殊字元組成的字串
比如,preg_match_all:按指定的正規表示式,在給定的字串中進行搜尋,匹配到符合特徵的部分取出來
<?php
$pattern
='/test/'
;$str
='abctestgtest kjdlrk'
;var_dump
(preg_match_all
($pattern
,$str
,$arr))
;?>
二、定界符
一般習慣使用正斜線 「/」 來作為定界的字元,前後一致
三、普通字元
四、元字元
比如,/d:代表十進位制數字0-9,中的任意乙個數字
<?php
$pattern
='/t\dst/'
;$str
='abct1stgkjdlrk'
;var_dump
(preg_match_all
($pattern
,$str
,$arr))
;?>
\d 匹配除十進位制數字以外的任何乙個字元
\s 匹配任意乙個空白字元,如換行符,換頁符,空格,製表符等
\s 匹配除空白字元以外的任何乙個字元
\w 匹配任意乙個數字,字母或下劃線
\w 匹配除數字,字母或下劃線以外的任何乙個字元
. 匹配除換行符以外的任意乙個字元,如果真的只是想匹配乙個 . 那麼在正規表示式的時候,把 . 使用 / 來轉義。
「*」 匹配0次,或1次,或多次其前面的字元
放在 * 前面的字元可以出現0次,1次或多次:
<?php
$pattern
='/te*st/'
;$str
='abcteeeeeeeest'
;var_dump
(preg_match_all
($pattern
,$str
,$arr))
;var_dump
($arr);
?>
「+」 匹配1次或多次其前面的字元
「?」 匹配0次或1次其前面的字元
表示前面的字元恰好出現n次:
<?php
/*元字元: n代表自己寫的乙個數字,表示其千公尺那字元恰好出現n次
放在前面的那個字元正好出現n次
*/$pattern
='/test/'
;$str
='abctest'
;var_dump
(preg_match_all
($pattern
,$str
,$arr))
;var_dump
($arr);
?>
表示前面的字元不少於n次
表示前面的字元至少出現n次,至多出現m次
…………
. 與 * 配合使用 貪婪匹配
<?php
/*.與*配合使用預設情況下是 貪婪匹配
.*後面加上?可以解決貪婪匹配的問題,變成懶惰匹配
*/$pattern
='/t.*t/'
;$str
='abctjdtkafhkahkwt'
;var_dump
(preg_match_all
($pattern
,$str
,$arr))
;var_dump
($arr);
?>
^或\a 匹配字串開始位置
$pattern
='/^test/'
;$str
='testabc'
;//必須以t開頭
var_dump
(preg_match_all
($pattern
,$str
,$arr))
;var_dump
($arr
);
$或\z 匹配字串結束位置
| 匹配兩個或多個模式、
$pattern
='/test|abc|aaa/'
;$str
='testkjafkwdabcjjkafkdaaa'
;var_dump
(preg_match_all
($pattern
,$str
,$arr))
;var_dump
($arr
);
匹配方括號中的任意乙個字元
$pattern
='/t[abce]st/'
;$str
='testkjtastafkwtcstdabc'
;var_dump
(preg_match_all
($pattern
,$str
,$arr))
;var_dump
($arr
);
[^] 匹配方括號中字元以外的任意乙個字元
() 將括號中的內容作為乙個整體以便將其中的內容獲取到,在正規表示式中,可以使用圓括號將某一段括起來,在圓括號的後面部分,我們可以使用 \ 數字來代表圓括號部分所匹配到的內容
$pattern
='/t(e)st\\1/'
;// \\1就代表第乙個圓括號部分所匹配到的內容'/teste/'
$str
=' teste '
;var_dump
(preg_match_all
($pattern
,$str
,$arr))
;var_dump
($arr
);
當()裡面是 . 時:
$pattern
='/t(.)(.)t\\1\\2/'
;// \\1就代表第乙個圓括號部分所匹配到的內容
$str
=' t1ct1c '
;var_dump
(preg_match_all
($pattern
,$str
,$arr))
;var_dump
($arr
);
五、模式修正符
i 在和模式進行匹配時不區分大小寫;
m 多行匹配, 使用條件:
1)目標字串中必須包含「\n」,在字串**現「\n」就表示新的一行開始
2) 正規表示式中必須出現^或$
s 若設定了此修正符,那麼 . 將匹配所有的字元包括換行符
u 禁止貪婪匹配
六、與正規表示式配合的函式
1.preg_match 執行乙個正規表示式匹配
引數說明:
1)正規表示式
2)目標字串
3)放乙個變數,執行完之後,裡面會有匹配到的部分以及等等一些資料
4)可以傳preg_offset_capture進入,預設傳的是0
5)可以傳乙個值,來表示從目標字串的哪個位置開始搜尋(單位是位元組)。
$pattern
='/t(.*?)st/'
;//
$str
=' test tfjhkst test tkfsjksdhst '
;var_dump
(preg_match
($pattern
,$str
,$arr
,preg_offset_capture))
;var_dump
($arr
);
2.preg_match_all
引數說明:
前三個同上
4)可選
preg_pattern_order
preg_set_order
preg_offset_capture
5)可以傳乙個值,來表示從目標字串的哪個位置開始搜尋(單位是位元組)
$pattern
='/t(.*?)st/'
;$str
=' test tfjhkst test tkfsjksdhst '
;var_dump
(preg_match_all
($pattern
,$str
,$arr
,preg_offset_capture))
;var_dump
($arr
);
3.preg_replace 執行乙個正規表示式的搜尋和替換 PHP正規表示式學習筆記
1.0.1 preg match 函式語法 int preg match string pattern,string subject,array matches int flags 0,int offset 0 搜尋 subject 與 pattern 給定的正規表示式的乙個匹配 引數說明 preg...
php正規表示式學習筆記(一)
1 正規表示式的介紹和作用 在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串 的需要。正規表示式就是用於描述這些規則的語法。2 php中兩個常用的正則函式 preg match 正則函式,以perl語言為基礎 ereg 正則函式,以posix基礎 unix script 3 正規表示...
PHP學習筆記之正規表示式
最近開始正式學習php,由於剛入門,之前零零散散的在網上搜尋,對php正規表示式這一塊的內容沒有乙個系統的認識,所以現在做一下小小的總結,我看的書是 php和mysql web開發 原書第四版 很厚一本,趁著寒假讀完吧。字符集可以用於匹配屬於特定型別的任何字元 事實上是一種萬用字元。例如 at可以與...