PHP 正則表示式
什麼是正則表示式?
正則表示式是構成搜尋模式的字元序列。當你在一則文字中搜索資料時,你可以使用這個搜尋模式來描述你正在搜尋的內容。
正則表示式可以是一個單獨的字元,也可以是更復雜的模式。
正則表示式可用於執行所有型別的文字搜尋和文字替換操作。
語法
在 PHP 中,正則表示式是由分隔符、模式和可選的修飾符組成的字串。
$exp = "/w3schools/i";
在上面的示例中,/
是 **分隔符**,w3schools 是正在搜尋的 **模式**,而 i
是一個 **修飾符**,它使搜尋不區分大小寫。
分隔符可以是任何不是字母、數字、反斜槓或空格的字元。最常用的分隔符是正斜槓(/),但當你的模式包含正斜槓時,選擇其他分隔符(如 # 或 ~)會更方便。
正則表示式函式
PHP 提供了多種允許你使用正則表示式的函式。
最常用的函式是
函式 | 描述 |
---|---|
preg_match() | 如果字串中找到該模式,則返回 1,否則返回 0 |
preg_match_all() | 返回字串中找到該模式的次數,也可能為 0 |
preg_replace() | 返回一個新字串,其中匹配的模式已被另一個字串替換 |
使用 preg_match()
preg_match()
函式會告訴你一個字串是否包含模式的匹配項。
示例
使用正則表示式對字串中的“w3schools”執行不區分大小寫的搜尋
$str = "Visit W3Schools";
$pattern = "/w3schools/i";
echo preg_match($pattern, $str);
自己動手試一試 »
使用 preg_match_all()
preg_match_all()
函式會告訴你字串中模式的匹配項數量。
示例
使用正則表示式對字串中“ain”的出現次數進行不區分大小寫的計數
$str = "The rain in SPAIN falls mainly on the plains.";
$pattern = "/ain/i";
echo preg_match_all($pattern, $str);
自己動手試一試 »
使用 preg_replace()
preg_replace()
函式會將字串中模式的所有匹配項替換為另一個字串。
示例
使用不區分大小寫的正則表示式將字串中的 Microsoft 替換為 W3Schools
$str = "Visit Microsoft!";
$pattern = "/microsoft/i";
echo preg_replace($pattern, "W3Schools", $str);
自己動手試一試 »
正則表示式修飾符
修飾符可以改變搜尋執行的方式。
修飾符 | 描述 | 試一試 |
---|---|---|
i | 執行不區分大小寫的搜尋 | 試一試 » |
m | 執行多行搜尋(搜尋字串開頭或結尾匹配項的模式現在將匹配*每行*的開頭或結尾) | 試一試 » |
u | 啟用對 UTF-8 編碼模式的正確匹配 |
正則表示式模式
方括號用於查詢一組字元
表示式 | 描述 | 試一試 |
---|---|---|
[abc] | 匹配括號內的任何一個或多個字元 | 試一試 » |
[^abc] | 查詢括號外的任何字元 | 試一試 » |
[a-z] | 匹配兩個字母之間的任何字母 | 試一試 » |
[A-z] | 匹配指定大寫字母和指定小寫字母之間的任何字母 | 試一試 » |
[A-Z] | 匹配兩個大寫字母之間的任何字母。 | 試一試 » |
[123] | 匹配括號內的任何一個或多個數字 | 試一試 » |
[0-5] | 匹配兩個數字之間的任何數字 | 試一試 » |
[0-9] | 匹配任何數字 | 試一試 » |
元字元
元字元是具有特殊含義的字元
元字元 | 描述 | 試一試 |
---|---|---|
| | 匹配由 | 分隔的任何一個模式,例如:cat|dog|fish | 試一試 » |
. | 匹配任何字元 | 試一試 » |
^ | 匹配字串的開頭,例如:^Hello | 試一試 » |
$ | 匹配字串的結尾,例如:World$ | 試一試 » |
\d | 匹配任何數字 | 試一試 » |
\D | 匹配任何非數字 | 試一試 » |
\s | 匹配任何空白字元 | 試一試 » |
\S | 匹配任何非空白字元 | 試一試 » |
\w | 匹配任何字母(a 到 Z)和數字(0 到 9) | 試一試 » |
\W | 匹配任何非字母和非數字字元 | 試一試 » |
\b | 匹配單詞的開頭,例如:\bWORD,或單詞的結尾,例如:WORD\b | 試一試 » |
\uxxxx | 匹配十六進位制數字 xxxx 指定的 Unicode 字元 | 試一試 » |
量詞
量詞定義數量
量詞 | 描述 | 試一試 |
---|---|---|
n+ | 匹配包含至少一個 n 的任何字串 | 試一試 » |
n* | 匹配包含零個或多個 n 的任何字串 | |
n? | 匹配包含零個或一個 n 的任何字串 | |
n{3} | 匹配包含 3 個 n 序列的任何字串 | 試一試 » |
n{2, 5} | 匹配包含至少 2 個但不多於 5 個 n 序列的任何字串 | 試一試 » |
n{3,} | 匹配包含至少 3 個 n 序列的任何字串 | 試一試 » |
注意:如果你的表示式需要搜尋一個特殊字元,你可以使用反斜槓( \ )來轉義它們。例如,要搜尋一個或多個問號,你可以使用以下表達式:$pattern = '/\?+/';
分組
你可以使用括號 ( )
將量詞應用於整個模式。它們也可用於選擇模式的一部分作為匹配項。
示例
使用分組搜尋單詞“banana”,方法是查詢ba後跟兩個na的例項
$str = "Apples and bananas.";
$pattern = "/ba(na){2}/i";
echo preg_match($pattern, $str);
自己動手試一試 »
完整 RegExp 參考
如需完整參考,請訪問我們的 完整 PHP 正則表示式參考。
該參考包含所有正則表示式函式的描述和示例。