努力添加中...... ...
正則表達式
- 正則表達式語法(POSIX)
·簡單的正則表達式
如字元g,它能與gog、haggle和bag等字元串匹配
如字元gan,它能與gang、organize和Reagan等字元串匹配
還可以使用管道操作符(|)同時測試不同的表達式:
正則表達式php|zend可以測試字元php或zend
·中括弧
[0-9]匹配任何從0到9的十進位數
[a-z]匹配任何小寫從a到z的字元
[A-Z]匹配任何大小從A到Z的字元
[A-Za-z]匹配任何大寫A到小寫z的字元
也可以使用[1~5]匹配1到5的十進位數或者[b~f]匹配小寫b到f的字元
·量詞
p+。匹配任何至少包含一個字元p的字元串
p*。匹配任何包含零個或多個字元p的字元串
p?。匹配任何包含零個或一個字元p的字元串
p{2}。匹配任何包含兩個連續p的字元串
p{2,3}。匹配任何包含兩個或三個連續p的字元串
p{2,}。匹配任何包含兩個或以上p的字元串
p$。匹配任何以p結尾的字元串
^p。匹配任何以p開頭的字元串
[^0-9]。匹配任何不包含0到9的十進位數
p.p。匹配任何包含p和p之間的字元串
^.{2}$。匹配任何只包含兩個字元的字元串
<b>(.*)</b>。匹配任何被<b></b>包圍的字元串
p(hp)*。匹配任何包含一個p,p後面是hp的字元串
·預定義字元範圍(字元類)
[:digit:]數字[0~9]
[:lower:]小寫字母[a~z]
[:upper:]大寫字母[A~Z]
[:alpha:]大小寫字母[A~Za~z]
[:alnum:]大小寫字母以及數字[A~Za~z0~9]
[:xdigit:]十六進位字元[A~Fa~f0~9]
[:graph:]33~126範圍的可列印ASCII字元
[:cntrl:]控制字元,如製表符、退格符或反斜杠
[:space:]空白字元:空格、水平製表符、垂直製表符、換行、換頁或換行
[:punct:]標點符號
- PHP的正則表達式函數
在PHP中有兩套正則表達式函數庫。
PCRE庫(Perl Compatible Regular Expression),基於傳統型NFA。PCRE庫使用和Perl相同的語法規則實現了正則表達式的模式匹配
POSIX擴展庫提供的(Portable Operation System interface),基於POSIX NFA。POSIX擴展的正則表達式由POSIX 1003.2定義
一般而言,實現相同的功能,使用PCRE庫的效率略占優勢
preg_match()函數
//如果匹配的字元串全部為小寫字母則返回false $name = "xiukang"; if(preg_match("([^[:lower:]])",$name)){ echo "true"; }else { echo "false"; }
preg_match()函數的第三個參數的作用,將字元串劃分成二維數組
$xiu = '/(www)(.)(baidu)(.)(com)/'; $kang = 'www.baidu.com'; preg_match_all($xiu,$kang,$match); echo $match[0][0];//www.baidu.com echo $match[1][0];//www echo $match[2][0];//. echo $match[3][0];//baidu echo $match[4][0];//. echo $match[5][0];//com
preg_grep()函數
preg_grep()函數返回一個數組。使用正則表達式匹配每個元素
$xiu = '/[0-9]/';//匹配包含1到9的字元串 $kang = array('123','456','abc','13ab','789'); $arr = preg_grep($xiu,$kang); print_r($arr);//Array ( [0] => 123 [1] => 456 [3] => 13ab [4] => 789 )
preg_grep()函數的第三個參數
$xiu = '/[0-9]/';//匹配包含1到9的字元串 $kang = array('123','456','abc','ab','789'); $arr = preg_grep($xiu,$kang,true);//true表示返回正則表達式未匹配的元素 print_r($arr);//Array ( [2] => abc [3] => ab )
=======================================
2.ereg()和eregi()
ereg()是POSIX擴展庫中正則表達式的匹配函數。eregi()是ereg()函數的忽略大小寫的版 本。二者與preg_match的功能類似,但函數返回的是一個布爾值,表明匹配成功與否。需要說明的是,POSIX擴展庫函數的第一個參數接受的是正則 表達式字元串,即不需要使用分界符。
進行全局正則表達式匹配
1.preg_match_all()
與preg_match()函數類似。如果使用了第三個參數,將把所有可能的匹配結果放入。本函數返回整個模 式匹配的次數(可能為0),如果出錯返回False。
2.多行匹配
僅僅使用POSIX下的正則表式函數,很難進行複雜的匹配操作。例如,對整個文件(尤其是多行文本)進行匹配查找。使用ereg()對此進行操作的一個方法是分行處理。
正則表達式的替換
1.ereg_replace()和eregi_replace()
函數原型:string ereg_replace (string pattern,stringpattern,stringreplacement, string $string)
string eregi_replace (string pattern,stringpattern,stringreplacement, string $string)
ereg_replace()在string中搜索模式字符串string中搜索模式字元串pattern,並將所匹配結果替換 為replacement。當replacement。當pattern中包含模式單元(或子模式)時,replacement中形如“\1”或“replacement中形如“\1”或“1”的位置將依次被這些子 模式所匹配的內容替換。而“\0”或“$0”是指整個的匹配字元串的內容。需要註意的是,在雙引號中反斜線作為轉義符使用,所以必須使用“\\0”,“ \\1”的形式。
eregi_replace()和ereg_replace()的功能一致,只是前者忽略大小寫。
2.preg_replace()
函數原型:mixed preg_replace (mixed pattern,mixedpattern,mixedreplacement, mixed subject[,intsubject[,intlimit])
preg_replace較ereg_replace的功能更加強大。其前三個參數均可以使用數組;第四個參數$limit可以設置替換的次數,預設為全部替換。
正則表達式的拆分
1.split()和spliti()
函數原型:array split (string pattern,stringpattern,stringstring [, int $limit])
本函數返回一個字元串數組,每個單元為string經正則表達式string經正則表達式pattern作為邊界分割出的子串。如 果設定了limit,則返回的數組最多包含limit,則返回的數組最多包含limit個單元。而其中最後一個單元包含了$string中剩餘的所有部分。spliti是split的 忽略大小版本。
2.preg_split()
本函數與split函數功能一致。
=================================================
·不區分大小寫的方法搜索
·以區分大小寫的方式替換文本
·以不區分大小寫的方式替換文本
·以區分大小寫的方式將字元串劃分為不同元素
·以不區分大小寫的方式將字元串劃分為不同元素
·調節只支持區分大小寫的正則表達式
- 正則表達式語法(Perl風格)
其他的字元串函數
- 確定字元串長度
- 比較兩個字元串
- 處理字元串大小寫
- 字元串與HTML互換
正則表達式函數的代替函數
- 填充和替換字元串
- 統計字元和單詞的個數
使用PEAR:Validate_US
- 安裝Validate_US
- 使用Validata_US