PHP 正則小解

2022-03-16 05:21:07 字數 2056 閱讀 9440

正規表示式(regular expression)

正規表示式系統:

1.posix

2.perl

php中使用的regex是pcre:

note:pcre(perl相容正規表示式,perl compatible regular expressions)

pcre語法:

1.定界符

必須成對出現,可以使用除0-9a-za-z\以外的任何字元

2.原子

1.正則需要匹配的可見和不可見字元都是原子

2.乙個正規表示式最少含有乙個原子

3.當需要匹配諸如"("、"["、"^"等含有語義的符號時需要用"\"反斜線進行轉義

原子字元:

\f 匹配換頁符

\n 匹配換行符

\r 匹配回車符

\t 匹配製表符

\v 匹配垂直製表符

3.元字元

\ 轉義字元

^ 匹配字串起始處

$ 匹配字串末尾

. 匹配除"\n"之外的任何單個字元

* 匹配前面的子表示式0或多次

+ 匹配前面的子表示式1次或多次

? 匹配前面的子表示式0次或1次

匹配n次

匹配n次或n次以上

最少匹配n次至多匹配m次,(n<=m)

中括號代表原子表,中間的原子地位都是相等。在匹配的時候,匹配表中的任意乙個字元

[^] 抑揚符,排除後面的原子表所包含的字元。

(pattern) 匹配pattern並獲取這一匹配。

\num 對獲取的第num個匹配的引用。

(?:pattern) 匹配pattern但不獲取這一匹配

(?=pattern) 正向肯定預查,非獲取匹配,例如:windows(?=xp|7)能匹配windowsxp中的windows不能匹配windows98中的windows

(?!=pattern) 正向否定欲查非獲取匹配,例如:windows(?!98|2000),能匹配windowsxp中的windows,不能匹配windows98中的windows

(?<=pattern) 反向肯定預查,非獲取匹配。例如:(?<=my|postgre)sql能匹配mysql中的sql,不能匹配mssql中的sql

(?\b 匹配單詞邊界

\b 匹配除單詞邊界以外的字元

\d 匹配任何乙個數字。等價於[0-9]

\d 匹配任何乙個非數字以外的字元。等價於[^0-9]

\s 匹配任何乙個空白字元(包括空格、製表符、換頁符等)。等價於[\f\n\r\t\v]

\s 匹配任何乙個非空白字元。等價於[^\f\n\r\t\v]

\w 匹配任何乙個數字、字母或下劃線。等價於[0-9a-za-z]

\w 匹配任何乙個非數字、字母或下劃線的字元。等價於[^0-9a-za-z]

4.模式修正符

i 不區分大小寫

m 此模式中如果有回車或換行,^和$將匹配每行的行首和行尾

s 讓.能匹配\n

x 忽略空白

u 取消貪婪,相當於(.*?)

a 與^效果一樣

d 結尾處不忽略回車 ,在結束處有$符的時候,在匹配的字串後面加上回車,$依然能夠匹配它成功。但是加上d之後,結尾的回車,不再匹配

note:正規表示式是從左向右進行匹配的

相關函式:

preg_filter — 執行乙個正規表示式搜尋和替換

preg_grep — 返回匹配模式的陣列條目

preg_last_error — 返回最後乙個pcre正則執行產生的錯誤**

preg_match_all — 執行乙個全域性正規表示式匹配

preg_match — 執行乙個正規表示式匹配

preg_quote — 轉義正規表示式字元

preg_replace_callback — 執行乙個正規表示式搜尋並且使用乙個**進行替換

preg_replace — 執行乙個正規表示式的搜尋和替換

preg_split — 通過乙個正規表示式分隔字串

php 二叉樹演算法小解

前段時間出去面試,被問到如果從乙個陣列中快速找到某乙個元素在該陣列的位置。我當時大概想到他是想問我演算法,當時不是很清楚怎麼寫,就用說切割字串,用字串函式去找,當時想的是字串函式查詢起來挺方便的。面試官直接說。我給的陣列很小,如果很大怎麼辦。肯定不能用你這種方法,他說用二叉樹,面試完之後自己回去查了...

EXECUTE IMMEDIATE用法小解

execute immediate 代替了以前oracle8i中dbms sql package包.它解析並馬上執行動態的sql語句或非執行時建立的pl sql塊.動態建立和執行sql語句效能超前,execute immediate的目標在於減小企業費用並獲得較高的效能,較之以前它相當容易編碼.儘管...

EXECUTE IMMEDIATE用法小解

execute immediate 代替了以前oracle8i中dbms sql package包.它解析並馬上執行動態的sql語句或非執行時建立的pl sql塊.動態建立和執行sql語句效能超前,execute immediate的目標在於減小企業費用並獲得較高的效能,較之以前它相當容易編碼.儘管...