PHP正則表達式

1.基本格式

 正則表達式的形式一般如下:
“/abc/”  或者 “#abc#”

2.正則函數

php中有兩套正則函數
一套是由PCRE庫提供的,使用“preg_”爲前綴命名的函數
一套是由POSIX擴展提供的,使用以“ereg_”爲前綴命名的函數(將退出歷史舞臺)
通常將模式表達式(即正則表達式)包含在兩個反斜線“/”之間,如“/apple/”。
使用PERL兼容規則的函數有:
preg_grep()
preg_replace_callback()
preg_match_all()
preg_match()
preg_quote()
preg_split()
preg_replace()
函數的具體使用,我們可以通過PHP手冊來找到。

3.元字符

較爲常用的元字符包括:“+”, “*”,以及“?”。
*   其前導字符必須在目標對象中出現0次、1次或連續多次;
.   用於匹配除換行符之外的所有字符1次;
?   其前導匹配對象連續出現0次或1次;
+   其前導匹配對象連續出現1次或多次;
|   選擇匹配類似PHP中的| (因爲這個運算符合是弱類型導致前面最爲整體匹配);
^   匹配對象出現在字符串的首部;
$   匹配對象出現在字符串尾部
 
{m}    匹配前一個內容的重複次數爲M次;
{m,}   匹配前一個內容的重複次數大於等於M次;
{m,n}  匹配前一個內容的重複次數M次到N次;
( )    合併整體匹配,並放入內存,可使用\1 \2…依次獲取;
 
\b     出現在目標字符串的開頭或結尾的兩個邊界之一,邊界可以是空格或者特殊字符;
\B     對象必須位於目標字符串的開頭和結尾兩個邊界之內,即匹配對象既不能作爲目標字符串的開頭,也不能作爲目標字符串的結尾;
\s:   用於匹配單個空格符,包括tab鍵和換行符,等價於[\f\t\v];
\S:   用於匹配除單個空格符之外的任何一個字符,[^\f\t\v];
\d:   匹配從0到9的一個數字,等價於[0-9];
\D     匹配除數字以外任何一個字符,等價於[^0-9];
\w:   用於匹配一個字母、數字或下劃線字符,等價於[0-9a-zA-Z_];
\W:   用於匹配所有除英文字母、數字和下劃線以外任何的一個字符,[^0-9a-zA-Z_];
 
\A     匹配字符串串首的原子
\Z     匹配字符串串尾的原子
\f     匹配一個換頁符等價於 \x0c 或 \cL
\t     匹配一個製表符;等價於 \x09\或\cl
\v     匹配一個垂直製表符;等價於\x0b或\ck
\oNN   匹配一個八進制數字
\xNN   匹配一個十六進制數字
\cC    匹配一個控制字符

4.運算順序

運算規則:從左→到右
優先級:   
()( )  圓括號因爲是內存處理所以最高;
* ? +  { } 重複匹配內容其次;
^ $ \b 邊界處理第三;
|  條件處理第四;
最後按照運算順序計算匹配。

5.運用實例

“^abc”:開頭一定要有”abc”字符串;
“of me$”:結尾一定要有”of me” 的字符串;
“^abc$”:就是要求以abc開頭和以abc結尾的字符串,實際上是隻有abc匹配;
“abc”:匹配包含abc的字符串;

’*’ ‘+’ 和 ‘?’ 只管它前面那個字符
“ab*”:  和ab{0,}同義,匹配以a開頭,後面可以接0個或者N個b組成的字符串(”a”, “ab”, “abbb”, 等);
“ab+”:  和ab{1,}同義,同上條一樣,但最少要有一個b存在 (”ab” “abbb”等);
“ab?”:  和ab{0,1}同義,可以沒有或者只有一個b;
“a?b+$”:匹配以一個或者0個a再加上一個以上的b結尾的字符串。
“ab{3,5}”: 要求a後面可以有2-5個b(”abbb”, “abbbb”, or “abbbbb”)。
“a(bc)*”: 匹配 a 後面跟0個或者一個”bc

“hi|hello”: 匹配含有”hi” 或者 “hello” 的字符串

“a.[0-9]”: 一個a加一個字符再加一個0到9的數字;
“^.{3}$”: 三個任意字符結尾。

中括號括住的內容只匹配一個單一的字符
“[ab]”: 匹配單個的 a 或者 b ( 和 “a│b” 一樣);

“^[a-zA-Z]”: 匹配以大小寫字母開頭的字符串;
“[0-9]%”: 匹配含有形如 x% 的字符串;
“,[a-zA-Z0-9]$”: 匹配以逗號再加一個數字或字母結尾的字符串;

6.驗證郵箱

構造檢查email的正則表達式
在一個完整的email地址中有三個部分:
1. 用戶名 (在‘@’左邊的一切)
2.’@’
3. 服務器名(就是剩下那部分)
用戶名可以含有大小寫字母阿拉伯數字,句號(’.’)減號(’-’)and下劃線’_’),服務器名字也是符合這個規則,當然下劃線除外。
現在,用戶名的開始和結束都不能是句點,服務器也是這樣,還有你不能有兩個連續的句點他們之間至少存在一個字符。
好現在我們來看一下怎麼爲用戶名寫一個匹配模式:
^[_a-zA-Z0-9-]+$
現在還不能允許句號的存在,我們把它加上:
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$
上面的意思就是說:以至少一個規範字符(除了.)開頭,後面跟着0個或者多個以點開始的字符串。
簡單化一點, 我們可以用eregi()取代ereg(),eregi()對大小寫不敏感, 我們就不需要指定兩個範圍“a-z”和“A-Z”只需要指定一個就可以了:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*$
後面的服務器名字也是一樣,但要去掉下劃線:
^[a-z0-9-]+(\.[a-z0-9-]+)*$
好,現在只需要用”@”把兩部分連接:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$
這就是完整的email認證匹配模式了,只需要調用:
eregi(”^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$”,$eamil)
就可以得到是否爲email了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章