专栏首页老Z的博客正则表达式之贪婪匹配 VS 非贪婪匹配

正则表达式之贪婪匹配 VS 非贪婪匹配

我们知道,许多程序设计语言都支持利用功能强大的正则表达式进行字符串操作,SAS中也有用正则表达式的PRX Function,平时在写正则表达式的时候会常碰到贪婪匹配与非贪婪匹配的问题。

贪婪匹配是指在保证后面的表达式都能匹配上的前提下尽可能多匹配,如有字符串STRING='Table 1.1 Subject Disposition including Screening Failures - All Screened Subjects                     3';

表达式:

"s/(Figure|Listing|Table)\s(.+)\s(.+)\s+\d/"

对于第二个括号,因为是贪婪匹配,可以理解为先匹配到字符串结尾,然后因为要保证后面的表达式都能匹配上,就从右往左“分配”(实际匹配顺序是从左往右),\d对应为3,\s+对应为紧挨3之前的一个空格(记为空格1),第三个括号(.+)对应为紧挨空格1前面的一个空格(记为空格2),\s对应为紧挨空格2前面的一个空格(记为空格3),那第二个括号匹配的就是1.1 Subject Disposition including Screening Failures - All Screened Subjects + Subjects与数字3之间除了空格1、2、3外的空格(如果这之间的空格数大于3)。

当然,这是对应原字符串数字3前面至少有3个空格,如果少于三个的话结果就变了,例如原字符串数字3前面只有有2个空格,即:STRING='Table 1.1 Subject Disposition including Screening Failures - All Screened Subjects  3'; 表达式同上,则结果就是:对于第二个括号,因为是贪婪匹配,可以理解为先匹配到字符串结尾,然后因为要保证后面表达式都能匹配上,就从右往左“分配”(实际匹配顺序是从左往右),\d对应为3,\s+对应为紧挨3之前的一个空格,第三个括号(.+)对应为Subjects+紧随其后的空格,\s对应为紧挨Subjects前面的一个空格,那第二个括号匹配的就是1.1 Subject Disposition including Screening Failures - All Screened。

非贪婪匹配是在保证后面的表达式都能匹配上的前提下尽可能少匹配。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SAS成语接龙

    今天无意间翻到3年前回复过的一个帖子:用SAS做成语接龙。编程思路如下:首先导入成语大全,提取首尾汉字,将所有成语放入哈希表中,然后将成语最后一个汉字去哈希表中...

    专业余码农
  • 批量改变SAS数据集字符型变量的长度

    临床试验的SAS程序猿/媛都知道,FDA对所提交的数据集的大小是有限定的,因为数据集过大在操作时会有点麻烦(比如打开会很慢),所以当我们生成最终的数据集时就要进...

    专业余码农
  • 一个关于Define.xml的奇怪问题

    今天一个同事和我说,她在做Define.xml时碰到一个奇怪的问题:最后要生成Define.xml的数据集中已经去除了各种特殊字符,但是生成的Define.xm...

    专业余码农
  • 加强存货的出入库管理方面来改善仓库管理工作

    1、物资采购应依据生产需求计划合理安排采购品种和数量,防止因盲目采购而导致材料的积压。

    明象ERP
  • 51单片机学习1

    一、单片机发展 单片机由单板机发展而来 单板机: 将CPU芯片、存储芯片、 I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再...

    Christal_R
  • 盘点 | Jeff Dean撰文回顾谷歌大脑2017:从基础研究到新硬件

    机器之心
  • Go 问答汇总篇 二

    继上篇 Go 问答汇总,已经过去了一个多月。今天汇总下近一个多月我关于 Go 的回答。

    波罗学
  • 通过代码组合覆盖率确定回归测试用例的优先级(CS SE)

    回归测试用例优先级排序(RTCP)旨在通过尽早执行更重要的测试用例来提高故障检测率。已经基于不同的覆盖标准提出了各种RTCP技术。其中,大多数技术都利用代码覆盖...

    刘子蔚
  • 【LeetCode】 两个数组的交集

    韩旭051
  • Wikibon年度预测:2018年人工智能的八个演变趋势

    素材来源|Wikibon 编译|AI商业周刊 编者按:Wikibon是一家大数据及人工智能领域的专业技术咨询和研究机构,旨在通过社区形式与开源共享免费咨询知识来...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券