LEN

正则表达式 环视
环视不匹配任何字符, 只匹配文本中的特定的位置 , 类似 b , ^ , $ 那样. 环视不会占用字符环视分为顺序...
扫描右侧二维码阅读全文
19
2017/02

正则表达式 环视

环视不匹配任何字符, 只匹配文本中的特定的位置 , 类似 b , ^ , $ 那样. 环视不会占用字符

环视分为顺序和逆序两种.

顺序

[?=exp] 位置的后面能匹配exp. 例如: (?\d) 当前位置右边是数字.
[?!exp] 位置的后面不能匹配exp. 例如: (?!\d) 当前位置右边不是数字.

逆序

[?<=exp] 位置的前面能匹配exp. 例如 (?<=\d) 当前位置左边是数字.
[?<!exp] 位置的前面不能匹配exp. 例如 (?<!\d) 当前位置左边不是数字.

光是看上面的内容可能不会太了解, 那一道经典面试题 说明
银行存款金额 后面三位用 '`' 替换

<?php
$num = '12345678901';
echo preg_replace('/(?<=\d)(?=(\d{3})+$)/', '`', $num);

12`345`678`901

(?<=d)(?=(d{3})+$) 和 (?=(\d{3})+$)(?<=d) 这两个反正数字是一样的
实际上这些正则用正确的方法是很容易就可以解决的.*

首先 注意的事项是:

  1. 左侧一定要有数字
  2. 每三个都需要添加 '`' 符号

那写出正则可以分部写出来 一步一步进化
(?=d{3}) 右侧必须有三个数字

`1`2`3`4`5`6`7`8`901

(?=(d{3})$) 三个数字结尾

12345678`901

(?=(d{3})+$) 三个数字及三个数字结尾

12`345`678`901

这是后看似都解决了问题 但是 如果数字长度为3的整数呢

`123`456`789`012

所以还需要 左侧做出限制
(?<=d)(?=(d{3})+$) 左侧需要有1到多个数字

123`456`789`012

本文均源于 四脚猫 视频课程

最后修改:2017 年 02 月 19 日 06 : 26 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论