程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> PHP 正則表達式語法(二)

PHP 正則表達式語法(二)

編輯:PHP基礎知識
 

重復

正則表達式的威力在於其能夠在模式中包含選擇和循環,正則表達式用一些重復規則來表達循環匹配。

常用的重復如下:

重復 說明 * 重復零次或更多次 + 重復 1 次或更多次 ? 重復零次或 1 次 {n} 重復 n 次 {n,} 重復 n 次或更多次 {n,m} 重復 n 到 m 次

分枝

分枝是指制定幾個規則,如果滿足任意一種規則,則都當作匹配成功。具體來說就是用 | 符號把各種規則分開,且條件從左至右匹配。

提示

由於分枝規定,只要匹配成功,就不再對後面的條件加以匹配,所以如果你想匹配有包含關系的內容,請注意規則的順序。

下面是一個使用分枝的例子。

美國的郵政編碼的規則是 5 個數字或者 5 個數字連上 4 個數字,如 12345 或者 54321-1234 ,如果要匹配所有的郵編,則正確的正則表達式為:

d{5}-d{4}|d{5}
//錯誤寫法
d{5}|d{5}-d{4}

下面的錯誤寫法,只能匹配到 5 位數字及 9 位數字的前 5 位數字的情況,而不能匹配 9 位數字的郵編。

分組

在正則表達式中,可以用小括號將一些規則括起來當作分組,分組可以作為一個元字符來看待。

分組的例子,驗證 IP 地址:

(d{1,3}.){3}d{1,3}

這是一個簡單的且不完善的匹配 IP 地址的正則表達式,因為它除了能匹配正確的 IP 地址外,還能匹配如 322.197.578.888 這種不存在的 IP 地址。

當然,用這個表達式簡單匹配成功後可以在利用 PHP 的算術比較再加以判斷 IP 地址是否正確。而正則表達式中沒有提供算術比較功能,如果要完全匹配正確的 IP 地址,則需要改進如下:

((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)

規則說明

該規則關鍵之處在於確定 IP 地址每一段范圍為 0-255 ,然後再重復 4 次即可。在:

25[0-5]|2[0-4]d|[01]?dd?

中,用分枝首先確定了 250-255 和 200-249 。 [01]?dd? 則確定了 0-199 的范圍,綜合起來就是 0-255 。

貪婪與懶惰

正則表達式默認的情況下,會在滿足匹配條件下盡可能的匹配更多內容。如 a.*b,用他來匹配 aabab ,它會匹配整個 aabab ,而不會只匹配到 aab 為止,這就是貪婪匹配。

與貪婪匹配對應的是,在滿足匹配條件的情況下盡可能的匹配更少的內容,這就是懶惰匹配。

上述例子對應的懶惰匹配規則為:

a.*?b

如果用該表達式去匹配 aabab ,那麼就會得到 aab 和 ab 這樣兩個匹配結果。

常用的懶惰限定符如下:

懶惰限定符 說明 *? 重復任意次,但盡可能少重復 +? 重復 1 次或更多次,但盡可能少重復 ?? 重復 0 次或 1 次,但盡可能少重復 {n,} 重復 n 次以上,但盡可能少重復 {n,m} 重復 n 到 m 次,但盡可能少重復

模式修正符

模式修正符是標記在整個正則表達式之外的,可以看著是對正則表達式的一些補充說明。

常用的模式修正符如下:

模式修正符 說明 i 模式中的字符將同時匹配大小寫字母 m 字符串視為多行 s 將字符串視為單行,換行符作為普通字符 x 將模式中的空白忽略 e preg_replace() 函數在替換字符串中對逆向引用作正常的替換,將其作為 PHP 代碼求值,並用其結果來替換所搜索的字符串。 A 強制僅從目標字符串的開頭開始匹配 D 模式中的 $ 元字符僅匹配目標字符串的結尾 U 匹配最近的字符串 u 模式字符串被當成 UTF-8  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved