在芯片開發(fā)過程中,正則表達(dá)式的使用非常常見。初次上手晦澀難懂,多用幾次愛不釋手!
本文將概述正則表達(dá)式以及實(shí)用的匹配規(guī)則,并給出使用表達(dá)式的輔助工具:CheatSheet和在線測(cè)試工具。
01 正則表達(dá)式概述
正則表達(dá)式,Regular Expression,或縮寫regexp,是一種用于描述文本模式(pattern)的表達(dá)式。通過該文本模式,我們可以從文本中高效和準(zhǔn)確地匹配查找到想要的字符串。
正則表達(dá)式的搜索和匹配功能非常強(qiáng)大,以至于幾乎所有的腳本語言(比如Python, Perl,JavaScript),Java等高級(jí)編程語言,甚至grep等一些Linux命令,都支持正則表達(dá)式。
在芯片開發(fā)過程中,難免會(huì)有很多膠水腳本(glue script)用來串接各種流程,也就不可避免的需要對(duì)流程中產(chǎn)生的中間文件做處理,可能是提取、刪除或者修改內(nèi)容等等。另外,在代碼review、仿真調(diào)試等階段,通常需要對(duì)代碼或者仿真日志做信息檢索或數(shù)據(jù)有效性檢查。
而這些,都是正則表達(dá)式在芯片開發(fā)過程中大顯身手的地方。
02 Cheat Sheet
CheatSheet可作為日常工具手冊(cè),用戶可以快速地查閱正則表達(dá)式的匹配規(guī)則。不過,實(shí)際經(jīng)驗(yàn)告訴我,多用了幾次之后,常用的匹配規(guī)則也就都記住了。
03 常用關(guān)系特性
從CheatSheet可以直接看到正則表達(dá)式最基礎(chǔ)的匹配規(guī)則,包括匹配數(shù)字、字母、空白、通配符、開頭、結(jié)尾等等。但在實(shí)際使用中,還需要考慮一些匹配關(guān)系,這也是本小節(jié)想要呈現(xiàn)的內(nèi)容。
> 捕獲分組(capturing group)和非捕獲分組(non-capturing group)
在正則表達(dá)式中,可以使用圓括號(hào)對(duì)表達(dá)式進(jìn)行分組。在匹配完成后,就可以使用分組編號(hào)來對(duì)圓括號(hào)中的內(nèi)容進(jìn)行提取。默認(rèn)情況下,整個(gè)表達(dá)式的分組編號(hào)是0,之后從左往右每遇到一個(gè)”(”就分配一個(gè)遞增的分組編號(hào)。舉個(gè)栗子:
除了如上圖所示直接使用分組編號(hào)對(duì)匹配結(jié)果進(jìn)行索引,我們還可以在表達(dá)式內(nèi)進(jìn)行分組命名,這樣就可以是使用組名來進(jìn)行索引。舉個(gè)栗子:
非捕獲分組同樣使用小括號(hào)來進(jìn)行匹配,其格式是(?:exp)。非捕獲分組只能在當(dāng)前的位置匹配文本,不會(huì)被分配分組編號(hào),也即是說,在匹配完成之后無法通過分組編號(hào)對(duì)其進(jìn)行索引。
> 前向匹配(lookahead)和后向匹配(lookbehind)
前向匹配和后向匹配,嚴(yán)格來講也是非捕獲分組。在有些地方會(huì)叫做環(huán)視(lookaround),意味著在匹配的時(shí)候需要先“環(huán)顧四周”。前后向匹配在實(shí)際應(yīng)用中非常常用。
前向匹配(?=exp),用來匹配右邊跟著指定字符串的文本;后向匹配(?<=exp),用來匹配左邊跟著指定字符串的文本。舉個(gè)栗子,匹配2022年且日期為22號(hào)的月份:
相反,通過把前后匹配表達(dá)式中的”=“改成”!”,即(?
> 貪婪匹配(greedy)和非貪婪匹配(non-greedy)
貪婪程度指的是正則表達(dá)式匹配停止的條件,貪婪模式會(huì)盡可能多的匹配,非貪婪模式會(huì)盡可能少的匹配。
默認(rèn)的匹配模式是貪婪模式,舉個(gè)栗子:d+可以匹配大于1個(gè)數(shù)字的字符串,那么針對(duì)被檢索文本“20220122”,正則表達(dá)式默認(rèn)盡可能多的匹配,即匹配整個(gè)“20220122”,因?yàn)樗紳M足“大于1個(gè)數(shù)字的字符串”這個(gè)pattern,而不是只匹配第一個(gè)數(shù)字“2”或匹配部分?jǐn)?shù)字“20220”。
非貪婪匹配也是非常常用的匹配模式,有些地方會(huì)叫做懶惰匹配(lazy),但都是一個(gè)意思:通過添加?來改變正則表達(dá)式匹配停止的條件。舉個(gè)栗子:
04 測(cè)試工具
這里推薦正則表達(dá)式的在線測(cè)試工具。在該網(wǎng)站上,提供了正則表達(dá)式的使用參考,并且可以供用戶測(cè)試自己寫出來的正則表達(dá)式是否符合預(yù)期。
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209328 -
JAVA
+關(guān)注
關(guān)注
19文章
2966瀏覽量
104702 -
編程語言
+關(guān)注
關(guān)注
10文章
1942瀏覽量
34707 -
腳本語言
+關(guān)注
關(guān)注
0文章
48瀏覽量
8223 -
正則表達(dá)式
+關(guān)注
關(guān)注
0文章
27瀏覽量
3483
原文標(biāo)題:芯片開發(fā)必備工具 | 正則表達(dá)式(RegularExpression)使用指南
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論