前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则表达式之贪婪匹配 VS 非贪婪匹配

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

作者头像
专业余码农
发布2020-07-16 10:17:05
2.3K0
发布2020-07-16 10:17:05
举报
文章被收录于专栏:老Z的博客老Z的博客

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

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

表达式:

代码语言:javascript
复制
"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。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档