正則表達式
正則表達式:用於描述字符排列和匹配模式的一種語法規則。它主要用於字符串的模式分割、匹配、查找及替換操作。
在PHP中有兩套正則表達式函數庫,兩者功能相似,只是執行效率略有差異:
一套是由PCRE(Perl Compatible Regular Expression)庫提供的。使用「preg_」為前綴命名的函數;
一套由POSIX(Portable Operating System Interface of Unix )擴展提供的(PHP默認)。使用以「ereg_」為前綴命名的函數;
PHP中,正則表達式有三個作用:
一個正則表達式中至少包含一個原子。
原子(普通字符,如英文字符)
元字符(有特殊功用的字符)
模式修正字符(對正則表達式語義的修正)
單個字符、數字,如a~z,A~Z,0~9。
模式單元,如(ABC)可以理解為由多個原子組成的大的原子。
原子表,如 [ABC]。
重新使用的模式單元,如:\\1
普通轉義字符,如:\d, \D, \w
轉義元字符,如:\*,\.
POSIX正則表達式全稱為Portable Operating System Interface of Unix,意為UNIX可移植操作系實現接口。
構造POSIX正則表達式的方法和創建數學表達式的方法一樣,也就是用多種元字符與操作符將小的表達式結合在一起來創建更大的表達式。
元字符是用於構造規則表達式的具有特殊含義的字符。如果要在正則表達式中包含元字符本身,必須在其前加上」\」進行轉義
元字符
*
+
?
|
^
$
[]
[^]
{m}
{m,n}
{m,}
()
.
^ $
abd===^abc$
順序
ereg()和eregi()
ereg_replace()和eregi_replace()
split()和spliti()
ereg()和eregi()ereg()字符串匹配函數,eregi()是ereg()函數的忽略大小的版本
語法格式:if (!ereg('^[^./][^/]*$', $userfile))//不匹配格式輸出die
ereg_replace()和eregi_replace(忽略大小寫)替換
string eregi_replace (「正則表達式」,「目標替換字符」,「替換目標」)
語法格式:$string = "This is a test";
split()和spliti(忽略大小寫)用正則表達式將字符串分割到數組中
list:給數組中的值賦予一些變量
語法格式:$date = "04/30/1973";
";
$rows = file('php.ini');
PCRE全稱為Perl Compatible Regular Expression,意思是Perl兼容正則表達式。
在PCRE中,通常將模式表達式(即正則表達式)包含在兩個反斜線「/」之間,如「/apple/」。
元字符
\A
\Z
\b
\B
\d
\D
\w
\W
\s
\t\v]
\S
\t\v]
\f
\t
\v
\oNN
\xNN
\cC
M
S
X
U
e
格式:/apple/i匹配「apple」或「Apple」等,忽略大小寫。
//1 提取第一位的屬性
/^\d{2} ([\W])\d{2}\\1\d{4}$匹配「12-31-2006」、「09/27/1996」、「86 01 4321」等字符串。但上述正則表達式不匹配「12/34-5678」的格式。這是因為模式「[\W]」的結果「/」已經被存儲。下個位置「\1」引用 時,其匹配模式也是字符「/」。
當不需要存儲匹配結果時使用非存儲模式單元「(?:)」
例如/(?:a|b|c)(D|E|F)\\1g/ 將匹配「aEEg」。在一些正則表達式中,使用非存儲模式單元是必要的。否則,需要改變其後引用的順序。上例還可以寫成/(a|b|c)(C|E|F)\2g/。
preg_match()和preg_match_all()
preg_quote()
preg_split()
preg_grep()
preg_replace()
preg_match()和preg_match_all()正則表達式的匹配
語法格式:if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) {
preg_quote()轉義正則表達式字符
語法格式:$keywords = "$40 for a g3/400";
preg_split()用正則表達式分割字符串
preg_split()本函數與split函數功能一致。
語法格式:$keywords = preg_split ("/[\s,]+/", "hypertext language, programming");
preg_grep()返回與模式匹配的數組單元
語法格式:$fl_array = preg_grep ("/^(\d+)?\.\d+$/", $array);
preg_replace()執行正則表達式的搜索和替換
語法格式:$string = "April 15, 2003";
語法格式:preg_match_all ("|<[^>]+>(.*)[^>]+>|U",
";
";
輸出結果:example: ,
沒有留言:
張貼留言