正則表達式無非就是字符本身的序列或模式。它們為模式對應功能提供了基礎。
使用正則表達式,您可以在另一個字符串中搜索特定字符串,您可以用另一個字符串替換一個字符串,您可以將一個字符串分成許多塊。
PHP 提供了特定於兩組正則表達式函數的函數,每組函數對應於某種類型的正則表達式。您可以根據自己的舒適度使用它們中的任何一個。
- POSIX 正則表達式
- PERL 風格的正則表達式
POSIX 正則表達式
POSIX 正則表達式的結構與典型的算術表達式的結構沒有什麼不同:各種元素(運算符)組合在一起形成更複雜的表達式。
最簡單的正則表達式是在g,haggle或bag等字符串內對應單個字符(例如g)的正則表達式。
讓我們解釋一下 POSIX 正則表達式中使用的幾個概念。之後我們將向您介紹正則表達式相關的功能。
括號
括號 ([]) 在正則表達式的上下文中使用時具有特殊含義。它們用於查找一系列字符。
序號 | 表達與說明 |
---|---|
1 | [0-9]
它對應從 0 到 9 的任何十進制數字。 |
2 | [az]
它對應從小寫 a 到小寫 z 的任何字符。 |
3 | [AZ]
它對應從大寫 A 到大寫 Z 的任何字符。 |
4 | [aZ]
它對應從小寫 a 到大寫 Z 的任何字符。 |
上面顯示的範圍是一般的;您還可以使用範圍 [0-3] 來對應範圍從 0 到 3 的任何十進制數字,或使用範圍 [bv] 來對應範圍從 b 到 v 的任何小寫字符。
量詞
括號內的字符序列和單個字符的頻率或位置可以用特殊字符表示。每個特殊字符都有特定的內涵。+,*,?,{int。range} 和 $ 標誌都遵循一個字符序列。
序號 | 表達與說明 |
---|---|
1 | p+
它對應任何包含至少一個 p 的字符串。 |
2 | p*
它對應任何包含零個或多個 p 的字符串。 |
3 | p?
它對應任何包含零個或一個 p 的字符串。 |
4 | p{ N }
它對應任何包含N p序列的字符串 |
5 | p{2,3}
它對應任何包含兩個或三個 p 序列的字符串。 |
6 | p{2, }
它對應任何包含至少兩個 p 的序列的字符串。 |
7 | p$
它對應任何以 p 結尾的字符串。 |
8 | ^ p
它對應任何以 p 開頭的字符串。 |
例子
以下示例將清除您有關對應字符的概念。
序號 | 表達與說明 |
---|---|
1 | [^a-zA-Z]
它對應任何不包含從 a 到 z 和 A 到 Z 的任何字符的字符串。 |
2 | pp
它對應任何包含 p 的字符串,後跟任何字符,依次後跟另一個 p。 |
3 | ^.{2}$
它對應任何恰好包含兩個字符的字符串。 |
4 | <b>(.*)</b>
它對應包含在 <b> 和 </b> 中的任何字符串。 |
5 | p(hp)*
它對應任何包含ap的字符串,後跟零個或多個php序列實例。 |
預定義的字符範圍
為了您的編程方便,可以使用幾個預定義的字符範圍,也稱為字符類。字符類指定整個字符範圍,例如,字母表或整數集 –
序號 | 表達與說明 |
---|---|
1 | [[:α:]]
它對應任何包含字母字符 aA 到 zZ 的字符串。 |
2 | [[:數字:]]
它對應任何包含數字 0 到 9 的字符串。 |
3 | [[:alnum:]]
它對應任何包含字母數字字符 aA 到 zZ 和 0 到 9 的字符串。 |
4 | [[:space:]]
它對應任何包含空格的字符串。 |
PHP 的 Regexp POSIX 函數
PHP 目前提供了七個使用 POSIX 風格的正則表達式搜索字符串的函數 –
序號 | 功能說明 |
---|---|
1 | ereg() 函數在 string 指定的字符串中搜索由 pattern 指定的字符串,如果找到模式則返回 true,否則返回 false。 |
2 | ereg_replace() 函數搜索由pattern 指定的字符串,如果找到則用replacement 替換pattern。 |
3 | eregi() 函數在 pattern 指定的字符串中搜索 string 指定的字符串。搜索不區分大小寫。 |
4 | eregi_replace() 函數的操作與 ereg_replace() 完全一樣,不同之處在於在字符串中搜索模式不區分大小寫。 |
5 | split() 函數將一個字符串分成不同的元素,每個元素的邊界基於字符串中模式的出現。 |
6 | spliti() 函數的操作方式與其兄弟 split() 完全相同,只是它不區分大小寫。 |
7 | sql_regcase() 函數可以被認為是一個實用函數,將輸入參數字符串中的每個字符轉換為包含兩個字符的括號表達式。 |
PERL 風格的正則表達式
Perl 樣式的正則表達式類似於它們的 POSIX 對應項。POSIX 語法幾乎可以與 Perl 風格的正則表達式函數互換使用。實際上,您可以使用前面 POSIX 部分中介紹的任何量詞。
讓我們解釋一下 PERL 正則表達式中使用的幾個概念。之後我們將為您介紹正則表達式相關的功能。
元字符
元字符只是一個字母字符,前面有一個反斜杠,用於賦予組合特殊的含義。
例如,您可以使用 ‘\d’ 元字符搜索大筆金額:/([\d]+)000/,這裡\d將搜索任何數字字符字符串。
以下是可以在 PERL 樣式正則表達式中使用的元字符列表。
Character Description . 單個字符 \s 一個空白字符(空格、製表符、換行符) \S 非空白字符 \d 一個數字 (0-9) \D 一個非數字 \ w一個字元(a-z,A-Z,0-9,_) \W 一個非單詞字符 [aeiou] 對應給定集合中的單個字符 [^aeiou] 對應給定集合之外的單個字符 (foo|bar|baz) 對應任何指定的替代方案
修飾符
有幾個修飾符可以讓您更輕鬆地使用正則表達式,例如區分大小寫、多行搜索等。
修飾符說明 i 使對應不區分大小寫 m 指定字符串是否有換行符或回車符 返回字符,^ 和 $ 運算符現在將 對應換行邊界,而不是 字符串邊界 o 只計算表達式一次 s 允許使用 . 對應換行符 x 允許您在表達式中使用空格以保持清晰 g 全局查找所有對應項 cg 允許在全局對應失敗後繼續搜索
PHP 的 Regexp PERL 兼容函數
PHP 提供以下使用 Perl 兼容的正則表達式搜索字符串的功能 –
序號 | 功能說明 |
---|---|
1 | preg_match() 函數在字符串中搜索模式,如果模式存在則返回真,否則返回假。 |
2 | preg_match_all() 函數對應字符串中所有出現的模式。 |
3 | preg_replace() 函數的操作與 ereg_replace() 類似,不同之處在於正則表達式可用於模式和替換輸入參數。 |
4 | preg_split() 函數的操作與 split() 完全一樣,只是正則表達式被接受為模式的輸入參數。 |
5 | preg_grep() 函數搜索 input_array 的所有元素,返回與正則表達式模式對應的所有元素。 |
6 | preg_quote()引用正則表達式字符 |
對應該字符,則應轉義以下內容
\^。 $ | ( ) [ ]
* + ? { } ,
特殊字符定義
\ 引用下一個元字符
^ 對應行首
.對應任何字符(換行符除外)
$對應行尾(或行尾換行之前)
|交替
() 分組
[] 字符類
* 對應 0 次或多次
+ 對應 1 次或多次
?對應 1 次或 0 次
{n} 正好對應 n 次
{n,} 至少對應 n 次
{n,m} 對應至少 n 但不超過 m 次
更多特殊角色的東西
\t 製表符 (HT, TAB)
\n 換行符 (LF, NL)
\ r返回(CR)
\f 換頁 (FF)
\a 鬧鐘 (bell) (BEL)
\e 轉義(想想 troff)(ESC)
\033 八進製字符(想想 PDP-11)
\x1B 十六進製字符
\c[ 控製字符
\l 小寫下一個字符(想想 vi)
\u 大寫下一個字符(想想 vi)
\L 小寫直到 \E(想想 vi)
\U 大寫直到 \E(想想 vi)
\E 結束案例修改(想想 vi)
\ Q引用(禁用)模式元字符,直到\ E
甚至更多特殊字符
\w 對應一個“單詞”字符(字母數字加“_”)
\W 對應一個非單詞字符
\s 對應一個空白字符
\S 對應一個非空白字符
\d 對應一個數字字符
\D 對應一個非數字字符
\b 對應單詞邊界
\B 對應一個非(詞邊界)
\A 僅在字符串開頭對應
\Z 只對應字符串的結尾,或者結尾的換行符之前
\z 只在字符串末尾對應
\G 僅對應前一個 m//g 停止的地方(僅適用於 /g)