PHP學習筆記之正規表示式

2021-09-10 09:53:20 字數 3072 閱讀 2530

最近開始正式學習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

="[email protected]"

;$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 正規表示...