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等等