正则表达式小点

1、表示一个反斜杠 '\',需要四个反斜杠来转义,即 '\\\\';头两个是转义出 \ ,并作为转义字符,后两个也是转义 \ ,作为 \ 本身的字符。

2、\num,官方定义:匹配 num,其中 num 是一个正整数,对所获取的匹配的引用。这里,\num 对应的时前面的第几个括号,若num的值大于括号的个数,则会出错。例如:

  /(3)\1/       匹配连续的两个3

  /(3)\1\1/      匹配连续的三个3

  /(3)\2/       出错

  /(3)(4)\1/     匹配连续的两个4,343

  /(3)(4)\2/     匹配连续的两个4,344

  /(3)(4)\1\2/    匹配连续的两个3和两个4,3434

  /(3)(4)\1\2\3/   出错

3、\xn、\n 对应的是十六进制和八进制的ascii码

4、\nm 若是匹配这种情况: \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。即:/(3)\1a/ 匹配 33a

5、贪婪模式和非贪婪模式:正则匹配是贪婪模式的,即尽可能趋向于最大长度匹配;非贪婪模式则是只要匹配到即可,不须全部最大。通过在限定符后面加上 ? 即可变成非贪婪,限定符有(*、+、?、{n,}、{n,m})。

6、括号副作用:用圆括号会有一个副作用,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。

  例如:/j(w)/,会缓存 w 字符,在用php的 preg_match_all 时数组会有两个值 array(2) { [0]=> array(1) { [0]=> string(2) "jw" } [1]=> array(1) { [0]=> string(1) "w" }};如果添加 ?: 则会消除缓存,得到 array(1) { [0]=> array(1) { [0]=> string(2) "jw" }}

7、反向引用:对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存 储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。这是对上面 2 的说明。

8、正向预查和反向预查:/j(?=w)/ 和 /j(?!w)/,最终只匹配显示 j,只是帮你过滤掉符合 = 和 !的字符串,而不会把 w 也添加进去。

9、http://deerchao.net/tutorials/regex/regex.htm#lookaround

posted @ 2016-05-17 16:50  林锅  阅读(799)  评论(0编辑  收藏  举报