0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

正则表达式(RegularExpression)使用指南

sanyue7758 来源:芯片学堂 2023-04-03 09:54 次阅读

芯片开发过程中,正则表达式的使用非常常见。初次上手晦涩难懂,多用几次爱不释手!

本文将概述正则表达式以及实用的匹配规则,并给出使用表达式的辅助工具:CheatSheet和在线测试工具。

01 正则表达式概述

正则表达式,Regular Expression,或缩写regexp,是一种用于描述文本模式(pattern)的表达式。通过该文本模式,我们可以从文本中高效和准确地匹配查找到想要的字符串。

正则表达式的搜索和匹配功能非常强大,以至于几乎所有的脚本语言(比如Python, Perl,JavaScript),Java等高级编程语言,甚至grep等一些Linux命令,都支持正则表达式。

在芯片开发过程中,难免会有很多胶水脚本(glue script)用来串接各种流程,也就不可避免的需要对流程中产生的中间文件做处理,可能是提取、删除或者修改内容等等。另外,在代码review、仿真调试等阶段,通常需要对代码或者仿真日志做信息检索或数据有效性检查。

而这些,都是正则表达式在芯片开发过程中大显身手的地方。

02 Cheat Sheet

CheatSheet可作为日常工具手册,用户可以快速地查阅正则表达式的匹配规则。不过,实际经验告诉我,多用了几次之后,常用的匹配规则也就都记住了。

015d3742-d13f-11ed-bfe3-dac502259ad0.png

03 常用关系特性

从CheatSheet可以直接看到正则表达式最基础的匹配规则,包括匹配数字、字母、空白、通配符、开头、结尾等等。但在实际使用中,还需要考虑一些匹配关系,这也是本小节想要呈现的内容。

> 捕获分组(capturing group)和非捕获分组(non-capturing group)

在正则表达式中,可以使用圆括号对表达式进行分组。在匹配完成后,就可以使用分组编号来对圆括号中的内容进行提取。默认情况下,整个表达式的分组编号是0,之后从左往右每遇到一个”(”就分配一个递增的分组编号。举个栗子:

01a08970-d13f-11ed-bfe3-dac502259ad0.png

除了如上图所示直接使用分组编号对匹配结果进行索引,我们还可以在表达式内进行分组命名,这样就可以是使用组名来进行索引。举个栗子:

01cf4efe-d13f-11ed-bfe3-dac502259ad0.png

非捕获分组同样使用小括号来进行匹配,其格式是(?:exp)。非捕获分组只能在当前的位置匹配文本,不会被分配分组编号,也即是说,在匹配完成之后无法通过分组编号对其进行索引。

> 前向匹配(lookahead)和后向匹配(lookbehind)

前向匹配和后向匹配,严格来讲也是非捕获分组。在有些地方会叫做环视(lookaround),意味着在匹配的时候需要先“环顾四周”。前后向匹配在实际应用中非常常用。

前向匹配(?=exp),用来匹配右边跟着指定字符串的文本;后向匹配(?<=exp),用来匹配左边跟着指定字符串的文本。举个栗子,匹配2022年且日期为22号的月份:

01e94a48-d13f-11ed-bfe3-dac502259ad0.png

相反,通过把前后匹配表达式中的”=“改成”!”,即(?

> 贪婪匹配(greedy)和非贪婪匹配(non-greedy)

贪婪程度指的是正则表达式匹配停止的条件,贪婪模式会尽可能多的匹配,非贪婪模式会尽可能少的匹配。

默认的匹配模式是贪婪模式,举个栗子:d+可以匹配大于1个数字的字符串,那么针对被检索文本“20220122”,正则表达式默认尽可能多的匹配,即匹配整个“20220122”,因为它都满足“大于1个数字的字符串”这个pattern,而不是只匹配第一个数字“2”或匹配部分数字“20220”。

非贪婪匹配也是非常常用的匹配模式,有些地方会叫做懒惰匹配(lazy),但都是一个意思:通过添加?来改变正则表达式匹配停止的条件。举个栗子:

021cd94e-d13f-11ed-bfe3-dac502259ad0.png

04 测试工具

这里推荐正则表达式的在线测试工具。在该网站上,提供了正则表达式的使用参考,并且可以供用户测试自己写出来的正则表达式是否符合预期。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206735
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102994
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33108
  • 脚本语言
    +关注

    关注

    0

    文章

    47

    浏览量

    8113
  • 正则表达式
    +关注

    关注

    0

    文章

    25

    浏览量

    3433

原文标题:芯片开发必备工具 | 正则表达式(RegularExpression)使用指南

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是正则表达式正则表达式如何工作?哪些语法规则适用正则表达式

    正则表达式又称规则表达式(Regular Expression,在代码中常简写为 regex、regexp 或 RE),是一种用于匹配、查找、替换文本的强大工具。它能够以特定的模式匹配字符串,从而
    的头像 发表于 11-03 14:41 564次阅读
    什么是<b class='flag-5'>正则表达式</b>?<b class='flag-5'>正则表达式</b>如何工作?哪些语法规则适用<b class='flag-5'>正则表达式</b>?

    shell正则表达式学习

    正则表达式在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多
    发表于 07-25 17:18

    浅析正则表达式

    正则表达式与django
    发表于 08-29 11:09

    正则表达式运用解析

    正则表达式的运用二
    发表于 09-11 08:59

    初识 Python 正则表达式

    正则表达式是一个特殊的字符序列,用于判断一个字符串是否与我们所设定的字符序列是否匹配,也就是说检查一个字符串是否与某种模式匹配。Python 自 1.5 版本起增加了re 模块,它提供 Perl
    发表于 03-17 16:44

    深入浅出boost正则表达式

    什么是正则表达式正则表达式是一种用来描述一定数量文本的模式。Regex代表Regular Express. 如果您不知道什么是正则表达式,请看这篇文章:深入浅出之正则表达式
    发表于 09-08 18:09 9次下载

    精通正则表达式

    详细的快速正则表达式的查询电子书,简单而丰富
    发表于 05-16 18:04 5次下载

    Python正则表达式的学习指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化
    发表于 09-15 08:00 0次下载
    Python<b class='flag-5'>正则表达式</b>的学习<b class='flag-5'>指南</b>

    Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化
    发表于 03-26 09:13 10次下载
    Python<b class='flag-5'>正则表达式</b><b class='flag-5'>指南</b>

    C语言如何使用正则表达式

    C语言的正则表达式规则,特此跟大家分享。
    的头像 发表于 03-16 08:41 4287次阅读

    python正则表达式中的常用函数

    编译正则表达式模式,返回一个正则对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
    的头像 发表于 03-18 16:12 1556次阅读

    Linux入门之正则表达式

    正则表达式是用来表达字符串匹配模式的方法,利用正则表达式,可以让我们轻易地实现对目标字符串的**查找**、**删除**、**替换**等操作。 正则表达式并不复杂,它并不包含难以理
    的头像 发表于 05-12 15:31 564次阅读
    Linux入门之<b class='flag-5'>正则表达式</b>

    shell脚本基础:正则表达式grep

    在Linux上有许多命令可以使用正则表达式,其中最常见的是grep命令和sed命令。正则表达式有多种类型,每种类型中可以使用的元字符类型不同。最常见的是基本正则表达式和扩展正则表达式
    的头像 发表于 05-29 09:29 770次阅读
    shell脚本基础:<b class='flag-5'>正则表达式</b>grep

    Python中的正则表达式

    哈喽大家好,我是了不起,今天给大家讲Python中的正则表达式 在Python中,正则表达式是一种强大的文本处理工具,它可以用来匹配、搜索、替换文本。正则表达式是一个特殊的字符序列,它可以描述一类
    的头像 发表于 06-21 16:52 709次阅读

    linux正则表达式匹配字符串

    在Linux操作系统中,正则表达式是一种强大的模式匹配工具,它可以用于在文本中查找、替换和筛选特定的字符串。准确掌握正则表达式的语法和常见应用,对于Linux系统的管理员和开发人员来说
    的头像 发表于 11-23 10:26 331次阅读