天天看點

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的行