正則表達式
在PHP中有兩套正則表達式函數庫,兩者功能相似,只是執行效率略有差異:
一套是由PCRE(Perl Compatible Regular Expression)庫提供的。使用“preg_”為前綴命名的函數;
一套由POSIX(Portable Operating System Interface of Unix )擴展提供的(PHP默認)。使用以“ereg_”為前綴命名的函數;
PHP中,正則表達式有三個作用:
匹配,也常常用於從字符串中析取信息。
用新文本代替匹配文本。
將一個字符串拆分為一組更小的信息塊。
一個正則表達式中至少包含一個原子。
原子(普通字符,如英文字符)
元字符(有特殊功用的字符)
模式修正字符(對正則表達式語義的修正)
原子(Atom)
單個字符、數字,如a~z,A~Z,0~9。
模式單元,如(ABC)可以理解為由多個原子組成的大的原子。
原子表,如 [ABC]。
重新使用的模式單元,如:\\1
普通轉義字符,如:\d, \D, \w
轉義元字符,如:\*,\.
POSIX正則表達式
POSIX正則表達式全稱為Portable Operating System Interface of Unix,意為UNIX可移植操作系實現接口。
構造POSIX正則表達式的方法和創建數學表達式的方法一樣,也就是用多種元字符與操作符將小的表達式結合在一起來創建更大的表達式。
元字符(Meta-character)
元字符是用於構造規則表達式的具有特殊含義的字符。如果要在正則表達式中包含元字符本身,必須在其前加上”\”進行轉義
元字符 說明
* 0次、1次或多次匹配其前的原子
+ 1次或多次匹配其前的原子
? 0次或1次匹配其前的原子
| 匹配兩個或多個選擇 列如 [1-9]|[a-b]|[A-Z] 與其中任何匹配為ture
^ 匹配字符串串首的原子 例如 abscd===^afdgfgf 相匹配
$ 匹配字符串串尾的原子 例如 dasdsv===v$
[] 匹配方括號中的任一原子 例如 s===[dsadas]
[^] 匹配除方括號中的原子外的任何字符 例如 aaaaa===[dddd]
{m} 表示其前原子恰好出現m次
{m,n} 表示其前原子至少出現m次,至少出現n次(n>m)
{m,} 表示其前原子出現不少於m次
() 整體表示一個原子
. 匹配除換行之外的任何一個字符
^ $ 這兩個原字符在一起稱為定界
abd===^abc$ 只有這樣才匹配
模式匹配的順序
順序 元字符 說明
1 () 模式單元
2 ?* +{} 重復匹配
3 ^$ 邊界限制
4 | 模式選擇
POSIX正則表達式函數
ereg()和eregi()
ereg_replace()和eregi_replace()
split()和spliti()
ereg()和eregi()ereg()字符串匹配函數,eregi()是ereg()函數的忽略大小的版本
語法格式:if (!ereg('^[^./][^/]*$', $userfile))//不匹配格式輸出die
{
die('這是一個非法的文件名!');
}
ereg_replace()和eregi_replace(忽略大小寫)替換
string eregi_replace (“正則表達式”,“目標替換字符”,“替換目標”)
語法格式:$string = "This is a test";
echo str_replace(" is", " was", $string);
echo ereg_replace("( )is", "\\1was", $string);\\1 為繼承第一個整體
echo ereg_replace("(( )is)", "\\2was", $string);\\2繼承第二個整體
split()和spliti(忽略大小寫)用正則表達式將字符串分割到數組中
list:給數組中的值賦予一些變量
語法格式:$date = "04/30/1973";
list($month, $day, $year) = split ('[/.-]', $date);//列出三個變數對應格式//以什麼形式拆分 拆分誰
echo "Month: $month; Day: $day; Year: $year<br />\n";
輸出結果Month: 04; Day: 30; Year: 1973