對於任何有過程式設計經驗的人來說,他對正規表示式應該不會感到陌生。
正規表示式(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|)
匹配cat
,cataract
,caterpillar
中的乙個
在反斜線後面加乙個大於零的數字可以引用模式前面捕獲的內容,這叫做後向引用。如果緊跟反斜線的數字小於 10, 它總是乙個後向引用, 並且如果在模式中沒有這麼多的捕獲組會引發乙個錯誤。
例如:
模式
(sens|respons)e and \1ibility
將會匹配sense and sensibility
和response and responsibility
, 但不會匹配sense and responsibility
。
乙個斷言就是乙個對當前匹配位置之前或之後的字元的測試, 它不會實際消耗任何字元。它有兩種型別: 前瞻斷言(從當前位置向前測試)和後瞻斷言(從當前位置向後測試);每個型別又有肯定斷言和否定斷言之分。可是我們的需求並非一直是要貪婪匹配的,有時候也會選擇懶惰的匹配模式。其實在量詞後面緊跟著所以共有以下四種斷言:
1、前瞻肯定斷言
(?=
2、前瞻否定斷言
(?!
3、後瞻肯定斷言
(?<=
4、後瞻否定斷言
(?例如:
\w+(?=;)匹配乙個單詞緊跟著乙個分號但是匹配結果不會包含分號
foo(?!bar)
匹配所有後面沒有緊跟bar
的foo
字串
(?貪婪/懶惰匹配模式
當正規表示式中包含能接受重複的限定符時,預設的行為是(在使整個表示式能得到匹配的前提下)匹配盡可能多的字元。這被稱為貪婪匹配。
例如:
以a.*b來搜尋
aabab
時,它會匹配整個字串aabab
。
?
即為懶惰模式。*?
+?
?
皆為懶惰匹配。
例如:常用的幾個修飾符以
a.*?b
來搜尋aabab
時,它會匹配字串aab
和ab
。
參考鏈結
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.更多策劃中 投稿,完善本系列,讓...