PHP 正規表示式

2021-09-14 08:40:13 字數 3154 閱讀 5952

對於任何有過程式設計經驗的人來說,他對正規表示式應該不會感到陌生。

正規表示式(regular expression)描述了一種字串匹配的模式(pattern),可以用來檢查乙個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

php 對正規表示式的支援

php 中有兩種型別的函式來處理正規表示式,一種是由 pcre 庫提供的函式,它們是以preg_字首開頭的;另一種是 由 posix 擴充套件提供的函式,它們是以ereg_字首開頭。但是從 php5.3.0 開始後者便不再建議使用,故而以下的知識都是針對 pcre 模式的。

php 正規表示式的組成部分

php 中的正規表示式由以下三部分組成:

例如:

/[a-za-z0-9-_]+/m
上面的例子當中:

字串收尾的/屬於正規表示式的分隔符,它可以是任意的非字母數字、非反斜線、非空白字元;

分隔符中間部分[a-za-z0-9-_]+屬於正規表示式的表示式;

正規表示式最後的部分m是修飾符,這裡的m表示多行選擇。

元字元

正規表示式的威力源於它可以在模式中擁有選擇和重複的能力。 一些字元被賦予 特殊的涵義,使其不再單純的代表自己,模式中的這種有特殊涵義的編碼字元 稱為 元字元。

元字元

含義\一般用於轉義字元

^斷言目標的開始位置(或在多行模式下是行首)

$斷言目標的結束位置(或在多行模式下是行尾)

.匹配除換行符外的任何字元(預設)

[開始字元類定義

]結束字元類定義

|開始乙個可選分支

(子組的開始標記

)子組的結束標記

?作為量詞,表示 0 次或 1 次匹配。位於量詞後面用於改變量詞的貪婪特性。 (查閱量詞)

*量詞,0 次或多次匹配

+量詞,1 次或多次匹配

自定義量詞結束標記

正規表示式的語法

左方括號開始乙個字元類的描述,並以方中括號結束。 單獨的乙個右方括號沒有特殊含義。如果乙個右方括號需要作為乙個字元類中的成員, 那麼可以將它寫在字元類的首字元處(如果使用了^取反, 那麼是第二個)或者使用轉義符。

乙個字元類在目標字串中匹配乙個單獨的字元; 該字元必須是字元類中定義的字元集合的其中乙個, 除非使用了 ^ 對字元類取反。

例如:

[\d]匹配所有的數字

[^\d]匹配所有的數字之外的字元

豎線字元用於分離模式中的可選路徑。 豎線可以在模式**現任意多個,並且允許有空的可選路徑(匹配空字串)。 匹配的處理從左到右嘗試每乙個可選路徑,並且使用第乙個成功匹配的。

比如:

模式gilbert|sullivan匹配gilbert或者sullivan

子組通過圓括號分隔界定,並且它們可以巢狀。子組具有兩個作用:

1、 將可選分支區域性化;

2、 將子組設定為捕獲子組。

比如:

模式cat(arcat|erpillar|)匹配catcataractcaterpillar中的乙個

在反斜線後面加乙個大於零的數字可以引用模式前面捕獲的內容,這叫做後向引用。

如果緊跟反斜線的數字小於 10, 它總是乙個後向引用, 並且如果在模式中沒有這麼多的捕獲組會引發乙個錯誤。

例如:

模式(sens|respons)e and \1ibility將會匹配sense and sensibilityresponse and responsibility, 但不會匹配sense and responsibility

乙個斷言就是乙個對當前匹配位置之前或之後的字元的測試, 它不會實際消耗任何字元。它有兩種型別: 前瞻斷言(從當前位置向前測試)和後瞻斷言(從當前位置向後測試);每個型別又有肯定斷言和否定斷言之分。

所以共有以下四種斷言:

1、前瞻肯定斷言(?=

2、前瞻否定斷言(?!

3、後瞻肯定斷言(?<=

4、後瞻否定斷言(?例如:

\w+(?=;)匹配乙個單詞緊跟著乙個分號但是匹配結果不會包含分號

foo(?!bar)匹配所有後面沒有緊跟barfoo字串

(?貪婪/懶惰匹配模式

當正規表示式中包含能接受重複的限定符時,預設的行為是(在使整個表示式能得到匹配的前提下)匹配盡可能多的字元。這被稱為貪婪匹配。

例如:

以a.*b來搜尋aabab時,它會匹配整個字串aabab

可是我們的需求並非一直是要貪婪匹配的,有時候也會選擇懶惰的匹配模式。其實在量詞後面緊跟著?即為懶惰模式。*?+??皆為懶惰匹配。

例如:

a.*?b來搜尋aabab時,它會匹配字串aabab

常用的幾個修飾符

參考鏈結

php正規表示式詳解,PHP正規表示式使用詳解

操作符 描述 轉義符 圓括號和方括號 限定符 anymetacharacter 位置和順序 或 操作 全部符號解釋 字元 描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開...

PHP正規表示式

php正規表示式的定義 用於描述字元排列和匹配模式的一種語法規則。它主要用於字串的模式分割 匹配 查詢及替換操作。php中的正則函式 php中有兩套正則函式,兩者功能差不多,分別為 一套是由pcre perl compatible regular expression 庫提供的。使用 preg 為字...

PHP正規表示式

今天起,會開始弄乙個php教程系列文章.主要是針對正規表示式的.大概的內容排序是這樣安排的 1.php 中的正規表示式 2.八個實用的php正規表示式 3.如何書寫更易閱讀的php正規表示式 4.半小時精通正規表示式 5.正則在文章採集系統中的應用及常見問題答疑 6.更多策劃中 投稿,完善本系列,讓...