正则表达式小点

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

转载于:https://www.cnblogs.com/linguoguo/p/5501683.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值