PHP學習筆記 正規表示式 9 23

2021-10-10 00:18:41 字數 4564 閱讀 1376

正規表示式

一、正規表示式語法規則

描述一類字串的特徵,然後通過這類特徵可以配合一些特定的函式,來完成對字串更加複雜的一系列操作。

普通字元和特殊字元組成的字串

比如,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可以與...