美文网首页
正则表达式 — 环视

正则表达式 — 环视

作者: Howborn | 来源:发表于2017-06-17 12:26 被阅读0次

原文:https://www.fanhaobai.com/2017/01/regex-lookaround.html

环视 是正则中的一个难点,但是在实际应用中使用起来却很方便。环视 不匹配文本中的任何字符,只匹配文本中的 特定位置 。环视类似于定位符^$\b,不会占用字符。

环视分为 顺序环视逆序环视 两种。

顺序环视

   类型             正则表达式                    匹配成功的条件
肯定顺序环视     (?=exp)                  子表达式能够匹配 右侧 文本
否定顺序环视     (?!exp)                  子表达式不能匹配 右侧 文本

顺序环视会检查子表达式exp 能否匹配成功,且 只寻找子表达式匹配成功时 左侧 位置,即子表达式能够匹配右侧文本。

小试牛刀

下面需要将每个操作系统用,分隔,正则表达式为(?=Win),实现代码如下:

$need = 'CentOS7Win7Win10';
$need = preg_replace('/(?=Win)/', ',', $need);
echo $need, PHP_EOL;

替换后的文本字符串为:

CentOS7,Win7,Win10

逆序环视

   类型             正则表达式                   匹配成功的条件
肯定逆序环视    (?<=exp)               子表达式能够匹配 左侧 文本
否定逆序环视    (?<!exp)               子表达式不能匹配 左侧 文本

逆序环视同样会检查子表达式exp 能否匹配成功,且** 只寻找子表达式匹配成功时 右侧 位置**,即子表达式能够匹配左侧文本。

小试牛刀

这里继续将上例中的系统名和版本之间用-分隔,正则表达式为(?<=(CentOS|Win)),代码如下:

$need = preg_replace('/(?<=CentOS|Win)/', '-', $need);
echo $need, PHP_EOL;

输出为:

CentOS-7,Win-7,Win-10

经典例子

需求:银行为了方便用户查阅存款金额,需要将存款金额整数部分从右往左每隔3位数字用 , 分隔。即12345需要显示为12,345

实现需求前,分析要实现的正则表达式的功能为:

  1. ,左侧一定要有数字;
  2. 从右往左每3位数字需要插入,字符;

先写出能从右往左匹配每3位数字的 左侧 位置的正则表达式,可知是 顺序环视 正则:

(?=(\d{3})+$)

该正则表达式在存款位数为3的整数倍时,也会在首位数字前添加,字符,所以需要限定为数字的 右侧 位置才添加,字符,使用 逆序环视 正则为:

(?<=\d)

故,总的正则表达式为:

(?<=\d)(?=(\d{3})+$)
或
(?=(\d{3})+$)(?<=\d)

最后,实现 代码 为:

$need = '123456';
$need = preg_replace('/(?<=\d)(?=(\d{3})+$)/', ',', $need);
echo $need, PHP_EOL;

运行结果:

123,456

相关文章

  • 第二章:使用正则表达式匹配修改文本

    匹配摄氏温度或者华氏温度 正则表达式部分常用符号: 使用正则表达式修改文本: 处理邮件: 环视 概念:环视只进行子...

  • 正则表达式 -- 环视

    如何使用正则表达式表示「非」逻辑? '^' 可以表示排除的逻辑: [^abc] # 除abc之外的所有字符 然而这...

  • 正则表达式 — 环视

    原文:https://www.fanhaobai.com/2017/01/regex-lookaround.htm...

  • JavaScript 正则表达式(3)

    在JavaScript正则表达式(2)中,我们一起学习了正则表达式的入门进阶功能,比如反向引用,分组匹配,环视,一...

  • python正则表达式详解

    #首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用法 环视用法...

  • 正则表达式之环视与位置

    环视与位置是正则表达式中的两个比较复杂难懂的概念。但是掌握后,对于正则的使用也会更得心应手,工作中的正则需求也就都...

  • 正则表达式还有一些细节

    1.关于\b的概念,详细分析 2.零宽断言(也叫环视、预搜索等) 3.正则引擎: 最近在看《精通正则表达式》(虽然...

  • re模块 —— 环视

    正则表达式引擎 分类: DFA: Deterministic Finite Automaton,确定型有穷自动机 ...

  • 正则

    前言 《精通正则表达式第三版》笔记,个人认为捕获和环视的概念很有用 1捕获组 每一个 () 内的匹配到的元素都对...

  • 正则实例拓展(环视特性)

    本篇主要介绍Perl(以及其他流派的正则)提供的简记法(shorthands),以及修改文本中使用的正则环视特性,...

网友评论

      本文标题:正则表达式 — 环视

      本文链接:https://www.haomeiwen.com/subject/upgvqxtx.html