天天看点

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

字符匹配

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

1. 匹配指定范围内的空格

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

2. 匹配指定范围内包含任意字符的字符串

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

[^ ]表示不包含空格在内的所有字符

3. 匹配指定范围内排除指定字符的字符串

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

筛选出的字符全部不含有“swertyu”中任何一个字母。

4. 特殊字符匹配符号的使用

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

上述指令用于匹配包含16进制中字符的字符串,16进制包含0-9和A-F,且不区分大小写。特殊字符匹配符号使用形式为“[[:xdigit:]]”,其中[:xdigit:]不可以单独使用,必须外面套上[]中括号才可以使用。我们也可以理解这样的用途:

[…]中括号用于匹配“包含[…]中含有的任意一个字符” 的字符串,[:xdigit:]正好将[…]中括号中的内容替换为0-9,A-F,a-f,即如下所示:

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

注意:”[15]”不代表15而代表1和5,即匹配包含1或者5的字符串。

次数匹配

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

1. 匹配包含任意字符的字符串

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

2. 匹配包含任意个任意字符的字符串

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

3. 匹配包含特定字符任意次的字符串

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

4. 匹配包含特定字符块任意次的字符串

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

5. 匹配包含n次连续特定字符块的字符串

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

6. 匹配包含大于等于1次连续字符的字符串

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

定位符

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

1. 使用()小括号匹配字符块

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

切记:在基础正则表达式中小括号需转义,但是在extended扩展版本中,则不需要:

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

2. 匹配特定字符串

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

Linux中的匹配是以行为单位的,也就是说“^go$”代表“匹配仅有go的行”。

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

这个则与上面那个不同,\bgo\b代表“匹配go这个单词”,注意“是匹配名称为go的单词,一个单词的前后有符号或者空格与其他字符分隔开来”,像“sjaahgosjaa”中虽然含有go,但是前后没有符号或者空格将go与其他字符分隔开来,因此“sjaahgosjaa”中go并不能被称为独立的单词。我们应该重点理解以下\b…\b和\B…\B的区别:

匹配字符 开头 结尾
\B…\B 数字 字母
字母 数字
数字 数字
\b…\b 字母 字母
ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

这个命令可以和\b…\b做个类比,\B…\B不可以匹配独立的单词了,\B…\B用于匹配“以数字开头或者以数字结尾,即单词前后只要有数字与其紧邻,那么就符合匹配条件”。

3. 匹配特定行的首末端

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

上述代码使用了”^…”来匹配以go开头的行,当然也可以结合(…)使用,以确保匹配的是“以go开头的行,而非以g开头的行”:

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

^…和^(…)是一个用法,得出的也都是同一个结果。

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

上述代码使用”…$”来匹配以go结尾的行,注意“只有这一行的字符结尾为go时,这一行才会被匹配到,并且标点符号也算作字符”。

4. 匹配特定字符的首末端

字符串之间必须以空格或者标点符号为分隔才可以被称之为独立的字符串,针对于独立的字符串,我们可以使用”\<…”匹配以特定字符块为首的字符串或者使用“\>…”匹配以特定字符块结尾的字符串,命令如下所示:

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

对比字符串和特定行匹配指令,我们可以进行如下分类:

指令 匹配条件 匹配对象
\Bgo\B 包含“与数字紧邻的go字符快”的字符串 字符串
\bgo\b 匹配独立的内容为go的字符串 字符串
^go 以go字符块开头的行
go$ 以go字符块结尾的行
\<go 以go字符块开头的字符串 字符串
\>go 以go字符块结尾的字符串 字符串

其中需注意:\<go\>和^go$所表达的含义含义

ROS中正则表达式的使用(rosbag record -e --regex)字符匹配次数匹配定位符

\<go\>和^go$所表达的含义如下所示:

字符 含义
\<go\> 匹配内容为go的字符串
^go$ 匹配内容为go的行