正規表示式(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的目標在於減小企業費用並獲得較高的效能,較之以前它相當容易編碼.儘管...