POSIX BRE和ERE的metacharacters(元字符)

CANoe开发入门到精通读书笔记(2)——CAPL编程 CAPL函数的语法跟C语言很类似,但也包含一些C语言所不具备的功能大部分CAPL支持的数据类型都可以直接声明为函数参数, 例如,整型、浮点型、枚举、结构、定时器以及它们的引用。但有一些类型不能被直接声明,而需要加上*号(注意该符号并不是C语言中 指针的意思)。例 如 : signal * s 、 envvarInt * ev 、 sysvarFloat * sv 、 diagRequest * dr、diagResponse * dr、int matrix[][],以及。 阅读详情

转自:http://blog.youkuaiyun.com/a627088424/article/details/15435873

从根本上来看,正则表达式是由两个基本组成部分所建立:一般字符与特殊字符。一般字符指的是任何没有特殊意义的字符。在某些情况下,特殊特殊字符也可以视为一般字符。特殊字符称为元字符(metacharacter)。

BRE:基本正则表达式(Basic Regular Expression)

ERE:扩展的正则表达式(Extended Regular Expression)


   

POSIX BRE与ERE的meta字符

  

字符

  BRE/ERE

        

                     模式含义

    \

 两者都可

通常可以关闭后续字符的特殊含义。有时则是相反的打开特殊含义,例如:\(...)\与\{...\}。

    .

 两者都可

匹配任意单个字符,但NUL除外。独立程序也可以不允许匹配换行字符。

    *

 两者都可

匹配在它之前的任何数目(或没有)的单个字符。

ERE:此前置字符可以是正则表达式,例如:因为.号表示任意字符,所以.*表示“匹配任一字符的任意长度”。

BRE:*若置与正则表达式的第一个字符,不具任何特殊意义。


tol.toy 匹配不到toltoy,而tol.*toy可以。

    ^

 两者都可

BRE:仅在正则表达式的开头具有特殊意义,像^abc表示以abc开头的行,而a^b中则表示^本身字面意思。

ERE:置于任何位置都有特殊意义,像ab^cd这样的正则表达式是有效的,只是无法匹配到任何内容,因为^前置了文本,会让其无法匹配到“字符串的开始”。

    $

 两者都可

BRE:仅在正则表达式的结尾具有特殊意义,像abc^表示以abc结尾的行,而a^b中则表示^本身字面意思。

ERE:置于任何位置都有特殊意义,像ab$cd这样的正则表达式是有效的,只是无法匹配到任何内容,因为$后置了文本,会让其无法匹配到“字符串的结尾”。

   [...]

 两者都可

方括号表达式,匹配方括号内的任一字符。

连字符(-)指的是字符范围。

^符号置于方括号里的第一个字符时,具有反向意义:指的是不在方括号内的任何字符。

作为首字符的一个连字符或结束方括号(]),则被视为列表的一部分。所有其他的meta字符也为列表中的一部分(也就是表示其字面意思,而不具有特殊意义)。

方括号表达式里可能会含有排序字符,等价字符以及字符集。

  \{n,m\}

   BRE

匹配在它前面的单个字符重现相应次数的行。

\{n\}指重现n次。\{n,\}则为至少重现n次。而 \{n,m\}为重现n到m次。n与m的值必须介于0到RE_DUP_MAX(含)之间,后者最小值为255。RE_DUP_MAX是POSIX定义的符号型常数,且可以通过getconf命令取得。它的最小值为255,不过部分系统允许更大值,如GNU/Linux为32767.

  

   BRE

将\(与\)间的模式存储在特殊的“保留空间”。最多可以将9个独立的子模式存储早单个模式中。匹配于子模式的文本,可以通过转义序列\1至\9,被重复使用在相同的模式里。例如:ab.*\1,指的是匹配于ab组合的两次重现,中间可存在任何数目的字符。

    \n

   BRE

重复在\(与\)方括号内第n个子模式至此点的模式。n为1至9的数字,1为由左开始。

   {n,m}

   ERE

与先前提及BRE的 \{n,m\}一样,只不过没有反斜杠。

    +

   ERE

匹配前面正则表达式的一个或多个实例。例:ab+c,表示中间有至少有一个b,等同于abb*c。

    ?

   ERE

匹配前面正则表达式的零个或一个实例。例:ab?c匹配的有ac与abc,就这两个。而ab*c,后者匹配中间有任意个b。

    |

   ERE

匹配|符号前面或后面的表达式。

   (  )

   ERE

匹配于方括号括起来的正则表达式群。组合。

利用它可以构建复杂而灵活的正则表达式。

例:[Tt]he  (CPU|computer)  is

例:read|write+指的是正好一个read,或write后面接着任意个数个e字符,比较有使用的模式应该是(read|write)+,值的是有一个read或重现多个read,或则一个write或重现多个write。

例:(read|write)+所指的字符串间不能有空白。((read|write)[[:space:]]*)+则是用以匹配多个连续出现的read或是write,且中间可能被空格隔开。

 

POSIX的方括号表达式:

为配合非英语环境,POSIX标准强化其字符集范围的能力。[a-z]表示a到z的小写英文,而法文è是字母字符,但是却不在[a-z]中。有例如,在Czech与Spanish语系下,ch两个字符会保持连续状态,在匹配时会被视为单个独立单位。

POSIX也在术语上做了变动,早先看到的[]称为字符集(character class),在POSIX标准下,现在叫括号表达式(bracket expression)。对原先进行了扩充。

另有额外的组成部分。

包括:

字符集(Character class)

    以[:与:]将关键字组合起来的POSIX字符集。关键字表示各种不同的字符集。

排序符号(Collating symbol)

    排序符号指将多个字符序列视为一个单位。使用[.与.]将字符组合起来。排序符号在系统所使用的特定locale上各有其定义。

等价字符集(Equivalence class)

    等价字符集列出的是应十二位等值的一组字符,例如e与è。它由取自于locale的名字元素组成,以[=与=]括住。


这三种构造都必须使用方括号表达式。例如[[:alpha:]!]匹配任一英文字母字符或惊叹号(!);而[[.ch.]]则匹配于ch,而不是字母c或h。在法文French的locale里,[[=e=]]可能匹配于e,é,è,ê,ë。


需要注意写法,像[:alpha:]这样,是匹配:,a,l,p,h,a,,表示匹配英文字母的正确写法应为[[:alpha:]]。要让]进入集合中,必须将它放在列表前,如:[]*\.]。要让减号-进入该集合,也请将它放在列表最前端。要让他两同时进入列表,请将右方括号放在第一个字符,减号放到最后一个字符,如[]*\.-]


POSIX字符集:

类别

匹配字符

[:alnum:]

数字字符

[:alpha:]

字母字符

[:blank:]

空格(space)与定位符(tab)

[:cntrl:]

控制字符

[:digit:]

数字字符

[:graph:]

非空格字符(nonspace)

[:lower:]

小写字母字符

[:print:]

可显示字符

[:punct:]

标点符号字符

[:space:]

空白字符

[:upper:]

大写字母字符

[:xdigit:]

十六进制数字


最后,POSIX明确陈述:NUL字符(数值的零)不需要时刻匹配的。这个字符在C语言里是用来指出字符串结尾,而POSIX标准则希望让它是直接了当的,通过正规C字符串的使用实现其功能。除此之外,另有其他个别的工具程序不允许使用.(点号)meta字符或方括号表达式来进行换行字符匹配。


连字符依然可以用
[0-9a-fA-F]可以表示十六进制数字[0123456789abcdefABCDEF]

[0-9]表示[0123456789]

....

[^]不是有效的正则表达式。可以这样匹配^,[\ ^]


BRE运算符优先级

由高到底:

[..]  [==]  [::]                                   用于字符排序的方括号表达式

\metacharacter                            转义的mera字符

[]                                                    方括号表达式

   \digit                                   子表达式与后项引用

*   \{  \}                                          前置单个字符重现的正则表达式

无符号(no symbol)                    连续

^  $                                               锚点(Anchors)


ERE运算符优先级

[..]  [==]  [::]                                        用于字符排序的方括号表达式

\metacharacter                               转义的mera字符

[]                                                         方括号表达式

( )                                                      分组

*  +  ?  {}                                           重复前置的表达式

无符号(no symbol)                        连续

^  $                                                   锚点(Anchors)

|                                                        交替(Alternation)



正则表达式的扩展

很多程序提供正则表达式语法扩展。这类扩展大多采用取反斜杠加一个字符,以形成新的运算法。最常见的扩展为\<和\>运算法。表示匹配单词的开头和结尾。对用正则表达式的扩展,请查看手册页。

额外的GNU正则表达式运算符

运算法

含义

\w

匹配任何单词组成字符,等同于[[:alnum:]_]

\W

匹配任何单词组成字符,等同于[^[:alnum:]_]

\<   \>

如前所述

\b

匹配单词的起始或结尾处所找到的空字符串。这是\<与\>的结合。主要以awk使用\b表示后退字符,因此GNU awk(gawk)使用\y表示此功能。

\B

匹配两个单词组成字符之间的空字符串

\’  \`

分别匹配emacs缓冲区的开始和结尾。GNU程序(还有emacs)通常将它们视为与^及$同义



POSIX表示NUL无需匹配,但GNU程序则没有限制。如NUL字符出现在输入数据里,则可以通过.字符或方括号表达式来匹配。

利用蓝牙低功耗技术与位置数据,提升邮政运输工具及笼车追踪的效率 BLE 即蓝牙低功耗技术,与无线音箱或各类电脑配件所用的技术类似。正如其名,BLE 的特点是:在实现相近传输范围的同时,功耗显著更低。这让它能应用于对电池续航要求极高的场景。 阅读详情

相关推荐

Rockchip开发板FUSB302快充调试避坑指南:从设备树配置到驱动修改全流程

本文详细解析了在Rockchip开发板上调试FUSB302快充功能的全流程,重点涵盖设备树配置、驱动修改及硬件设计避坑指南。针对PD协议协商失败、电流倒灌等常见问题,提供了从软件配置到硬件排查的实战解决方案,帮助嵌入式工程师高效完成快充功能开发。

weixin_28256233的博客 114

Linux之正则表达式---grep、元字符、任意字符、锚、中括号、否定、POSIX字符类

正则表达式是一个非常重要的用于文本操作的工具。 0.参考文献 《Linux命令行大全》 [美] William E. Shotts. Jr 著 郭光伟 郝记生 译, 人民邮电出版社 更多有用的Linux知识详解,可参加博主的Linux学习导航页 1.什么是正则表达式 正则表达式是一种符号表示法,用于识别文本模式。在某种程度上,它们类似于匹配文件和路径名使用的shell通配符。 许多命令行工具和大多数编程语言都支持正则表达式,以此来解决文本操作方面的问题。但不同的编程语言之间,正则表达式会略有不同。 方便

mathlxj的博客 7066

Android应用之【巧妙隐藏桌面图标的进阶方案】

本文详细探讨了Android应用中隐藏桌面图标的进阶方案,解决了传统方法在Android 10及以上版本中出现的黑色图标残留问题。通过Intent-Filter配置和厂商适配技巧,实现子应用真正隐身,同时确保主应用正常启动。适用于企业工具套件、模块化系统等场景,提升用户体验和安全性。

weixin_28363123的博客 506

Shell(12)正则表达式

正则表达式,又称规则表达式。(英语RegularExpression),在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通被用来检索、替换那些符合某个模式(规则)的文本。正则表达式不只有一种,而且LINUX中不同的程序可能会使用不同的正则表达式,如工具LINUX中常用的有两种正则表达式引擎基础正则表达式BRE扩展正则表达式ERE。...

tu464932199的博客 319

遥感数据下载——FIRM:VIIRS火点数据、MODIS火点数据简介及下载

一、FIRMS(Fire Information for Resoutce Management System) 网站链接:https://firms.modaps.eosdis.nasa.gov/map/ 这个网站上对VIIRS及MODIS的火灾数据进行了显示,可以进行按日期、产品类别等动态的展示火点数据或火烧迹地,同时也提供了数据下载控件。高级选择中还可以进行数据统计结果展示。 二、VIIR...

knkn123的博客 3万+

STM32G474+Simulink+HIL硬件在环仿真

硬件:STM32G474RET6(官方的NUCLEO板)软件:STM32Cube_FW_G4 V1.6.1芯片包;KeilMATLAB 2023B(本文已成功)STM32嵌入式支持包。

qq_44701116的博客 1779

MySql模糊匹配

mysql

wade1010的专栏 2618

YOLO11改进-注意力-引入Deformable Large Kernel Attention (DLKA) 解决多尺度、小目标、遮挡等问题

Deformable Large Kernel Attention (DLKA) 是一种用于视觉任务的注意力机制,旨在提升模型在处理不同尺寸和形状对象时的灵活性和性能。DLKA 的设计灵感源自传统的注意力机制,但通过引入可变形核(deformable kernel)来增强对局部特征的适应能力。

qq_64693987的博客 4042

bre与ere的区别_Linux正则表达式特性详解及BRE与ERE的异同点

Linux正则表达式(Regular Expression)主要遵从POSIX BRE或者POSIX ERE标准。什么是POSIX呢,POSIX Portable Operating System Interface 可移植操作系统接口ERE是BRE的扩展版本,具体更强的处理能力,并增加了一些元字符(metacharactor)。BRE主要的能力集有:1) 普通字符(Literal text),如...

weixin_42347522的博客 352

BAQ压缩原理

BAQ——Block Adaptive Quantization,块自适应量化,一种数据压缩算法。

2872

Python爬虫教程:抓取地方政府网站的公开文件与政策信息

Web爬虫是指一种自动化脚本,用于模拟人类浏览器访问网页、提取网页内容的数据抓取工具。发送请求到目标网页;获取网页内容;解析网页内容,提取所需数据;将数据保存或进一步处理。爬虫可以抓取各种形式的数据,如文本、图片、文件等。本教程将重点展示如何抓取地方政府网站上公开的政策文件、公告等信息。许多政府网站都会采取一定的反爬虫措施,防止大量数据被爬取。IP封锁:如果短时间内大量请求来自同一IP,可能会被封锁。验证码:一些网站会使用验证码来验证访问者是否为机器人。动态加载。

2201_76125261的博客 1981

POSIX 正则表达式 BRE 与 ERE的区别

<br />传统上,POSIX 定义了两种正则表达式语法, 即:基本正则表达式(BRE)和扩展正则表 达式(ERE)。大多数LINUX程序至少要符合BRE规范。linux中,不同的程序支持的REGXP也不同,如sed只支持BRE的大部分,这主要是收到速度的限制。sed编辑器要尽可能快的处理数据流中的文本。而grep可以支持ERE,不过要使用-E 选项。gawk使用BRE引擎。 其中, BRE 定义的语法符号包括: . - 匹配任意一个字符。 [] - 字符集匹配,匹配方括号中定义的字符集之一。 [^] -

小庄往左走 1万+

从零开始:手把手教你设计人形机器人锂电池供电系统

人形机器人要像人类一样“活起来”,必须有稳定的“能量血液”——供电系统。本文聚焦锂电池供电系统如何根据机器人功耗选择合适的锂电池参数(容量、电压、放电倍率);如何设计电池管理系统(BMS)保护电池安全;如何解决机器人运动时的“瞬时大电流”供电难题;如何通过硬件电路和代码实现供电系统的监测与控制。用“机器人小助手的能量危机”故事引入锂电池供电系统;拆解锂电池核心参数(容量、电压、放电倍率)和供电系统三大组件(电池组、BMS、电源转换模块);

AI天才研究院 1759

基本正则表达式与扩展正则表达式

基本正则表达式与扩展正则表达式基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符(meta charactor)的区别而已。(对,就是这么简单)BRE:只有^$.[]* 是元字符ERE:^$.[]+(){}?|都是元字符ERE中新加的字符在BRE里只是普通的字符,如+ 只能匹配字符加号。如果像在BRE里使用特殊含义,需要转义。示例:$echo "abcdefg" | grep 'a

Focus 2013

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

正则表达式说明

简介 大体来讲,正则表达式的文法分为3种标准:BRE、ERE 和 ARE。其中 BER 和 ERE 属于 POSIX 标准,ARE 则是由各家定义的扩展。   POSIX 正则表达式 传统上,POSIX 定义了两种正则表达式语法, 即:基本正则表达式(BRE)和扩展正则表 达式(ERE)。 其中, BRE 定义的语法

wyh0318的专栏 535

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

POSIX正则表达式

<br />正则表达式(regular expression)是一种表示方式,在许多地方均有对此的支持,如命令grep、语言Python、工具vim等。但是这里仅讨论POSIX正则表达式,显然它与其他正则表达式(如传统的Unix正则表达式)存在稍许的差异。POSIX正则表达式分为:BRE(Basic Regular Expression)和ERE(Extended Regular Expressions)。以下是有关POSIX正则表达式的元字符(meta)的说明:<br /><br />/<br />用于关

My_Notebook 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

正则表达式之BRE与ERE字符集

(一)BRE——Basic Register Express 基本的正则表达式(1)字符集: (2)Meta字符: (3)方括号表达式:(4)后向引用:匹配于正则表达式匹配的先前的部分。 第一步将子表达式包围在(与)里; 第二部使用\digit,匹配于第n个先前方括号内子表达式匹配成功的字符。(5)区间表达式:n与m的值在0至RE_DUP_MAX之间,RE_DUP_MAX最小为25

继学先生 1625

Linux正则表达式多个条件并,linux 正则表达式深度解析

简介大体来讲,正则表达式的文法分为3种标准:BRE、ERE 和 ARE。其中 BER 和 ERE 属于 POSIX 标准,ARE 则是由各家定义的扩展。POSIX 正则表达式传统上,POSIX 定义了两种正则表达式语法, 即:基本正则表达式(BRE)和扩展正则表达式(ERE)。其中, BRE 定义的语法符号包括:. - 匹配任意一个字符。[] - 字符集匹配,匹配方括号中定义的字符集之一。[^] ...

weixin_29454029的博客 1355

【字符串处理Python实现】字符串模式匹配之暴力、BM算法简介与实现

字符串模式匹配之暴力、BM算法简介与实现

weixin_37780776的博客 2151

LINUX中ERE类型,LINUX正则表达式特性及BRE与ERE的区别

LINUX正则表达式(Regular Expression)主要听从POSIX BRE或者POSIX ERE标准。什么是POSIX呢,POSIXPortable Operating System Interface 可移植操做系统接口ERE是BRE的扩展版本,具体更强的处理能力,并增长了一些元字符(metacharactor)。gitBRE主要的能力集有:正则表达式1) 普通字符(Literal ...

weixin_35703557的博客 278

Linux命令中的正规表达式元字符大解析

本文主要介绍了在Linux命令中使用到正则表达式时需要理解和识别的3种元字符集,进而能够更熟练更准确地使用对应的Linux命令。

hyman.lu 2004

Go分布式爬虫学习笔记(十二)

例如,微软办公软件 Words 在 2007 之后的版本的底层数据就是通过 XML 文件描述的。我们前面在 XPath 例子的中使用的 div[@class=“news_li”],在 CSS 选择器中可以简单地表示为 div.news_li。这是一种更加简单的表示方法。在 CSS 文件中,我们可以定义一个或多个 HTML 中的标签的路径,并指定这些标签的样式。在类似如下的日志文件中,包含了很多订单号的信息,即 order_id 后面的一串数字。在 Go 语言中,字符串是默认通过 UTF-8 的形式编码的。

成长之路 1013

正则表达式 流派(flavor)及差异简介

在使用正则表达式的过程中,大家可能会注意到不同的工具里边正则表达式的语法貌似有些不一样,不同的语言支持的正则表达式语法也会有一些不同,其实出现这些情况的根本原因就是存在几大流派,它们之间存在一些差别。 一、流派介绍 正则表达式简单来说有三大流派:PCRE、BRE、ERE PCRE(Perl Compatible Regular Expression):可以说是正则表达式的老前辈,它是从Per

Kerwin's Blog 2365

UNIX/Linux 系统实现限制

1. 操作系统实现限制标准定义了操作系统在实现时的限制 规定某些最大值最小(至少)是多少,实际实现中可以更大,严格符合此标准的应用则应小于这个最小值 规定某些最小值最大(最多)是多少,实际实现中可以更小,严格符合此标准的应用则应大于这个最大值 即实际的实现范围应比标准规定的范围更广,这样可以满足更大的需求 即严格符合标准的应用应在标准规定的范围内,这样比较具有可移植性 标准定义的限制值往往加了 _P

王慧勇 1276

POSIX中的正则表达式

POSIX标准的正则表达式API由操作系统中的C标准库实现。在Linux系统中,有GNU C Library实现。 应用程序通过调用库函数实现正则表达式操作,无需与内核交互。

m0_72938142的博客 2284

【Linux】正则表达式

正则表达式是一种可供Linux工具过滤文本的自定义模板,Linux工具(如sed、gawk)会在读取数据时使用正则表达式对数据进行模式匹配。 正则表达式使用元字符来描述数据流中的一个或多个字符。它是由正则表达式引擎实现的。正则表达式引擎是一种底层软件,负责解释正则表达式并用这些模式进行文本匹配。

lemon9597的博客 1035
上一篇: C语言使用正则表达式
下一篇: 轻松记住大端小端的含义(附对大端和小端的解释)
ly0303521
博客等级 码龄17年 135粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值