看板 Knuckles_note
作者 標題 [PHP] Regular Expression 小括弧() 的用法
時間 2011年06月16日 Thu. AM 04:47:35
PHP官方網站對於 regular expression 的小括號 () 用法的說明頁
PHP: PCRE regex syntax / Subpatterns
終於看懂了,來記錄一下...
小括弧有兩種用途:
1. 群組各種可能的子字串,例如 /filename\.(jpg|png|gif)/
這樣就可以找到這三種副檔名的圖檔
2. 標記要取得的字串,例如 /a=(.*?)&b=(.*?)&c=(.*?)&d=/
就可以把 a, b, c 的值分別存到 $1, $2, $3
這兩種用途有時候會混在一起,像是
echo preg_replace("/((red|white) (king|queen))/","$1, $2, $3","red queen");
← red queen → $1
← red → $2
← queen → $3
會得到 red queen, red, queen
如果只想拿()當群組用,但不要被算進要抓的字串,可以在(後加上 ?:,例如
echo preg_replace("/((?:red|white) (king|queen))/","$1, $2","red queen");
會得到 red queen, queen (第二個括弧的red不會被抓出來了)
?:中間可以加上選項,例如 i 是忽略大小寫
寫成 (?i:saturday|sunday) 等同於 (?:(?i)saturday|sunday)
可以符合 SUNDAY 或 Saturday,i的效果僅限於這個()
抓到的字串,除了自動依順序配給 $數字 外,也可以自己加上名字
語法 (?P<name>pattern) ,在 PHP5.2.2 另外提供了 (?<name>pattern) 及 (?'name'pattern) 兩種用法
在當群組用時,若每個可能的字串又有用到標記要抓的字串時
例如 (?:(Sat)ur|(Sun))day
用在 Sunday 時,$1="",$2="Sun"
用在 Saturday 時,$1="Sat,$2不存在
此時可以改用 (?|(Sat)ur|(Sun))day
這樣就只會抓到1個字串,$1="Sun" 或 $1="Sat"
至於(?= )、(?! )、(?<= )、(?<! ) 是 assertions 的用法,請參考 這一篇
(?> ) 是 Once-only subpatterns 又叫 Atomic Group
代表裡面的東西只要一匹配成功就不會再回溯嘗試其他的可能
--
※ 作者: Knuckles 時間: 2011-06-16 04:47:35
※ 編輯: Knuckles 時間: 2011-10-11 05:30:03
※ 看板: KnucklesNote 文章推薦值: 3 目前人氣: 0 累積人氣: 2064
回列表(←)
分享