http://php.net/manual/zh/book.pcre.php
PCRE模式php
preg_replace($pattern, $replacement, $string);
$subject = "abcdef"; $pattern = '/^def/'; preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3); print_r($matches);
http://php.net/manual/zh/reference.pcre.pattern.modifiers.phpgit
this is a (apple|orange) //若是要否認子模式,則須要使用斷言:前斷言?!和後斷言?<! this is a (?!apple|orange).*
會匹配:this a apple、this a orange、this a ,能夠匹配空字符
若是不須要捕獲括符內容的話,在前面加上 ?:
便可,若是須要再加上內部選項設置,在 ?
和:
之間設置,一下寫法做用是相同的github
(?P<name>pattern) (?<name>pattern) (?'name'pattern)
(?:(Sat)ur|(Sun))day
(?|
修改模式來修復這個問題:(?|(Sat)ur|(Sun))day
單字符量詞正則表達式
特殊用法:數組
U
模式,量詞後面加 ?(問號) 標記則成婪模式,就是和全局的匹配模式模式反着來。在大於等於php5.2.2版本中採用 \g{1} 寫法能夠更好的理解,序列\1, \g1,\g{1} 之間是同義詞關係,這種用法能夠消除使用反斜線緊跟數值描述反向引用時候產生的歧義app
\g 轉義序列緊跟一個負數表明一個相對的後向引用。好比: (foo)(bar)\g{-1} 能夠匹配字符串 」foobarbar」, (foo)(bar)\g{1} 能夠匹配 」foobarfoo」。 這在長的模式中做爲一個可選方案, 用來保持對以前一個特定子組的引用的子組序號的追蹤。函數
後向引用也支持使用子組名稱的語法方式描述, 好比 (?P=name) 或者 PHP 5.2.2 開始能夠實用\k<name> 或 \k'name'。 另外在 PHP 5.2.4 中加入了對\k{name} 和 \g{name} 的支持。性能
(?=
開頭(?!
開頭(?<=
開頭(?<!
開頭可使匹配器根據一個斷言的結果, 或者以前的一個捕獲子組是否匹配來條件式的匹配一個子組或者在兩個可選子組中選擇。 條件子組的兩種語法以下:ui
(?(condition)yes-pattern) (?(condition)yes-pattern|no-pattern)
Jeffrey Friedl 書(精通正則表達式)中包含了不少關於正則表達式性能的討論。this
[abc]
若是是字符集是多個字符組成,也叫字組(子模式),好比匹配apple和orange任意一個:
this is a (apple|orange|)
會匹配:this a apple、this a orange、this a ,能夠匹配空字符
若是不須要捕獲括符內容的話,在前面加上 ?:
便可,若是須要再加上內部選項設置,在 ?
和:
之間設置,一下寫法做用是相同的
(?i:saturday|sunday) (?:(?i)saturday|sunday)
^
表示開頭處,可是在字符集下,它表明反向(否認),好比下面表示不包含abc中任意一個字符[^abc]
(?修飾符)
apple (?iand) orange
以上會匹配apple and orange、apple And orange等等