最近開始正式學習php,由於剛入門,之前零零散散的在網上搜尋,對php正規表示式這一塊的內容沒有乙個系統的認識,所以現在做一下小小的總結,我看的書是《php和mysql web開發》(原書第四版),很厚一本,趁著寒假讀完吧。
字符集可以用於匹配屬於特定型別的任何字元;事實上是一種萬用字元。
例如:
.at
可以與"cat"、「sat」、"mat"進行匹配。(通常這種萬用字元匹配用於作業系統的檔名匹配)
但上述同樣可以匹配『#at』,如果要限定是a到z之間的字元,則可以像下面這樣指明:
[a-z]at
[aeiou] //表示母音字母
[a-za-z] //表示任何的大小寫字母
此外,還可以用集合來指明字元不屬於某個集。當把脫字符號 (^) 包括在方括號裡面時,表示否。例如,
[^a-z] //匹配任何不在a到z之間的字元
通常,程式設計師會希望指明某個字串或字元類將不止一次地出現,在正規表示式中可使用兩個特殊字元代替。
[[a-za-z]] + //表示至少有乙個英文本母
(very)*large //可以匹配「large」、「very large」、「very very large」等
(very ) //表示重複1~3次,即匹配「very」、「very very」和「very very very」
(very ) //表示重複3次,即匹配「very very very」
(very ) //表示至少重複2次,即匹配「very very」和「very very very···」及更多。
^bob //在字串開始時匹配bob
com$ //將匹配com出現在字串末尾處的字串
^[a-z]$ //匹配只包含a到z之間乙個字元的字串
可以使用正規表示式中的一條豎線來表示乙個選擇。例如,要批評com、edu或net,可以使用如下所使表示式:
com|edu|net
如果要匹配前面提到過的特殊字元,如,. 、
最小/最大量記號的結束
(子模式的開始
?標記乙個子模式為可選的
表2 在posix正規表示式中,用於方括號裡面的特殊字元摘要字元
意義\轉義字元
^非,僅用在開始位置
-用於指明字元範圍
shop|customer service|retail
^[a-za-z0-9_\-.]+@[a-za-z0-9\-]+\.[a-za-z0-9\-.]+$
解釋如下:
^[a-za-z0-9_\-.]+
表示「至少由乙個字母、數字、下畫線、連字元、點號或者這些字元組合為開始的字串」。
注意,當在乙個字元類的開始或末尾處使用點號時,點號將失去其特殊萬用字元的意義,只能成為乙個點號字元。
@表示匹配字元「@」
子表示式[a-za-z0-9\-]+ 與包含文字數字字元和連字元的主機名匹配。請注意,我們去除了連字元,因為它是方括號內的特殊字元。
字元組合「\.」匹配「.」字元。在字元類外部使用點號,必須對其轉義,使其匹配乙個點號字元。
子表示式[a-za-z0-9\-.]+$ 匹配網域名稱剩下部分,它包含字母、數字和連字元,如果需要還可以包含更多的點號直到字串的末尾。
用正規表示式查詢子字串,這是正規表示式的主要應用。
在php中,可以使用的並且用於匹配posix風格正規表示式的兩個函式是ereg()和eregi()。( eregi()除了不區分大小寫外,其他功能與ereg()一樣 )
ereg()函式原型如下:
int ereg(string pattern, string search, array [matches]);
該函式搜尋字串serch,在pattern中尋找與正規表示式相匹配的字串。如果發現了pattern的子表示式相匹配的字串,這些字元將會儲存在陣列matches中,每個陣列元素對應乙個子表示式。
例如:
if(!
eregi
('^[a-za-z0-9_\-.]+@[a-za-z0-9\-]+\.[a-za-z0-9\-.]+$'
,$email))
注:php中的ereg()函式存在截斷漏洞,在ctf比賽中可能會用到,可參考下面這篇文章ereg()截斷漏洞
string ereg_replace(string pattern, string replacement, string serch);
該函式在字串serch中查詢正規表示式pattern的字串,並用字串replacement來替換。
函式eregi_replace()除了不區分大小寫外,其他與ereg_replace()相同。
另乙個實用的正規表示式函式是split(),它的原型如下所示:
array split(string pattern, string search[, int max]);
這個函式將字串search分割成符合正規表示式模式的子字串,然後將子字串返回到乙個陣列中。整數max指定進入陣列中的元素個數。
該函式對分割電子郵件位址、網域名稱或日期非常有用,例如,
$address
;$arr
= split (
"\.|@ "
,$address);
while
(list
($key
,$value)=
each
($arr))
以上**將主機名分割成5個部分並將它們分別輸出到一行:
username
@example
.com
PHP正規表示式學習筆記
1.0.1 preg match 函式語法 int preg match string pattern,string subject,array matches int flags 0,int offset 0 搜尋 subject 與 pattern 給定的正規表示式的乙個匹配 引數說明 preg...
PHP之正規表示式
pattern 正規表示式 subject 正規表示式匹配的資料 preg match all pattern,subject,matches 匹配第乙個符合的 preg match 0 9 sdad456dsad5dsa4dsad4e4d e5s8 show1 匹配所有符合標準的 preg mat...
php正規表示式學習筆記(一)
1 正規表示式的介紹和作用 在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串 的需要。正規表示式就是用於描述這些規則的語法。2 php中兩個常用的正則函式 preg match 正則函式,以perl語言為基礎 ereg 正則函式,以posix基礎 unix script 3 正規表示...