正規表示式

2021-08-14 03:14:13 字數 4389 閱讀 7990

php支援兩種風格的正如l表示式語法:posix和perl,這裡我們主要使用更簡單的posix風格

一、基礎知識

正規表示式是一種描述一段文字模式的方法,在php中,匹配正規表示式更有點像strstr()匹配,而不像相等比較,因為是在乙個字串的某個位置(如果不指明則可能在字串中的任何位置)匹配另乙個字串。例如,字串」shop」匹配正規表示式「shop」。它也可以匹配正規表示式「h」、「h。」,等。

二、字符集和類

使用字符集可以馬上給出比精確匹配功能還要強大的正規表示式。字符集可以用於匹配屬於特定型別的任何字符號 事實上它們是一種萬用字元

1.「.」

例如:「.at」可以與 「cat 「、「 sat 」和「mat 「等進行匹配。通常,這種萬用字元用於作業系統中的檔名匹配。

2.「[ ]」

任何包含在方括號「[ ]」中的內容都是乙個字元類一一 乙個被匹配字元所屬的字元集合。 請注意, 方括號中的表示式只匹配乙個字元,例如:「[aeiou]」表示乙個母音集合;而「[a-za-z]」表示乙個範圍(所有大小寫字母)。

3.「^」脫字元

例如:「[^a-z]」可以用來匹配任何不在a和z之間的字元。當把脫字符號「^」包括在方括號裡面時, 表示否。

三、重複

通常, 我們會希望指明某個字串或字元類將不止一次地出現。

1.「*」表示這個模式可以被重複0次或更多次

2.「+」則表示這個模式可以被重複1次或更多次。

這兩個符號應該放在要作用的表示式的後面。

四、子表示式

通常,將乙個表示式分隔為幾個子表示式是非常有用的,例如,可以表示「至少這些字元 審中的乙個需要精確匹配」。可以使用圓括號來實現,與在數學表示式中的方樓一樣。

例如:(very )*large

可以匹配「large」、「verylarge」、「very very large」等。

五、子表示式計數

可以用在花括號「{}」中的數字表示式來指定內容允許重複的次數。可以指定乙個確切的重複次數「」(表示重複3次),或者乙個重複次數的範圍「」(表示重複2-4次),或是一 個開底域的重複範圍」

表示匹配「very」「very very」和「very very very」。

六、定位到字串的開始或末尾

1.「[a-z]」模式將匹配任何包含了小寫字母字元的字元息。無論該字串只有乙個字元,或者 在整個更長的字串中只包含乙個匹配的字元.都沒有關係。也可以確定乙個特定的子表示式是否出現在開始、末尾或在兩個位置都出現。當要確定字 符串中只有要找的單詞而沒有其他單詞出現時,它將相當有用。

2.「^」用於正規表示式的開始,表示子字串必須出現在被搜尋字串的開始處

3.「$」用於正規表示式的末尾,表示子字元扇必須出現在字串的末尾。

例如:以下是在字串開始處匹配bob,

^bob

這個模式將匹配com出現在字串末尾處的字串:

com$

最後,這個模式將匹配只包含a到z之間乙個字元的字串:

^[a-z] $ (注意和「[^a-z]」的意思是不同的)

七、分支

可以使用正則表邊式中的一條豎線來表示乙個選擇。 例如, 如果要匹配com、 edu或net,就可以使用如下所示的表示式:

com|edu|net

八、匹配特殊字元

「\」

如果要匹配前面提到過的特殊字元, 例如, . 、 {或者$, 就必須在它們前面加乙個反斜槓」\」。 如果要匹配乙個反斜槓. 則必須用兩個反斜槓「\\」來表示。

注意:在php中 ,必須將正規表示式模式包括在乙個單引號字串中。 使用雙引號引用的正規表示式將帶來一些不必要的複雜性(因為php中的雙引號中的內容會經過解釋後再輸出)。 php還使用反斜槓來轉義特殊字元一一例如反斜槓。

如果希望在模式中匹配乙個反斜槓, 必須使用兩個反斜槓來表示它是乙個反斜槓字元, 而 不是乙個轉義字元。

同樣, 由於相同的原因, 如果希望在乙個雙引號引用的php字串中使用反斜槓字元, 必須使用兩個反斜槓。 這可能會有些提淆, 這樣要求的結果將是表示乙個包含了反斜槓字元的正規表示式乙個php字串需要4個反斜槓。 php解擇器將這4個反斜槓解釋成2個。 然後, 由正規表示式直譯器解析為乙個。

$符號也是雙引號引用的php字串和正規表示式的特殊字元。要使乙個$字元能夠在模式中匹配 , 必須用「\\\$」。因為這個字串被引用在「」中, php直譯器將其解析為\$,

而則表示式直譯器將其解析成乙個$字元。

九、特殊字元一覽

所有特殊字元的摘要如表1和表2所示。 表1顯示了方擴號外特殊字元的意義, 表2顯示了當它們用在方括號裡面時的意義。

表1,用於方括號外字元

意義\轉義字元

^在字串開始匹配

$在字串末尾匹配

.匹配除換行符(\r)之外的字元

;匹配分支的開始(讀為或)

(子模式的開始

)子模式的結束

*重複0次或更多次

+重複1次或更多次

最小/最大量記號的結束

?標記乙個子模式為可選的

表2,用於方括號內字元

意義\轉義字元

^非,僅用在開始位置

-用於指明字元範圍

十、在智慧型表單中的應用

1.在智慧型表單應用程式中, 正規表示式至少有兩種用途。 第一種用途是在顧客的反饋中查詢特定的名詞。 使用正規表示式, 可以做得更智慧型一些。 使用乙個字串函式, 如果希望匹配「shop」 、「 customer service」 或 「 retail 」,就必須做3次不同的搜尋。 如果使用乙個 正規表示式, 就可以同時匹配所有3個, 如下所示:shop|customer service|retail

2.第二個用途是驗證程式中使用者的電子郵件位址, 這需要通過用正規表示式來對電子郵件位址的標準格式進行編碼。 這個格式中包含一些數字或標點符號, 接著是符號 「 @ 」,然後是包括文字或數字和字元組成的字串, 後面接著是乙個 「 . 」 (點號), 後面包括文字或數字以連字元組成的字串, 可能還有更多的點號, 直到字串結束, 它的編碼如下所示:

^[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函式

一、用正規表示式查詢子字串

查詢子字串是正規表示式的主要作用。在php中,可以使用的並且用於匹配posix風格正規表示式的兩個函式是ereg()和eregi()。ereg()函式原型如下所示:

int ereg(string pattern,string search,array[matches]);

該函式搜尋字串search,在pattern中尋找與正規表示式相匹配的字串。如果發現與它相匹配,則將會儲存在陣列matches中,每個陣列元素對應乙個子表示式。

函式eregi()除了不區分大小寫外,其他功能和ereg()一樣。

二、用正規表示式替換子字串

與str_replace()函式一樣,也可以使用正規表示式來查詢和替換子字串。

在正規表示式中,可以使用的兩個函式是ereg_replace()和eregi_replace(不區分大小寫)

三、使用正規表示式分割字串

主要使用函式split()實現。這隊分割電子郵件位址,網域名稱或日期是非常有用的。

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...