re2c使用小結(3)

2021-06-23 10:01:59 字數 1501 閱讀 9637

之前兩篇學習文章,雖然可以滿足一些要求,但是對於十分複雜的正規表示式還是無能為力。

比如現實當中某,url的格式定義如下

dvb://..[.][;]

如何正確解析這樣的url,用上面兩種方法顯然不行。

我這裡想到一種方法,二遍搜素。第一遍匹配正則,第二遍再做分解字串。

這裡要用到goto語句。

#include #include /*

* 定義符號

*/enum;

/*!types:re2c */

/* * 掃瞄

* dvb://..[.][;]

*/static enum scancontition cond = 0;

int scan(char *buf, int *length) else

hex 

id dot

and

slash

semicolon

"dvb:" slash slash hex dot hex dot hex (dot hex( and hex)*)?(semicolon id)?(slash id)* => dvb

<*> [^\x00]

<*> [\x00]

*/    }

}static char buf = "***:/dvb:";

int yylex()

return 0;

}int main (int argc,char ** argv)

編譯

re2c -isc dvb03.re >dvb03.out.c

執行結果token:4,len:1,str:d

token:4,len:1,str:v

token:4,len:1,str:d

token:4,len:1,str::

token:4,len:1,str:/

token:0,len:4,str:dvb:

token:3,len:1,str:/

token:3,len:1,str:/

token:1,len:3,str:888

token:3,len:1,str:.

token:1,len:2,str:12

token:3,len:1,str:.

token:1,len:3,str:12a

token:3,len:1,str:.

token:1,len:2,str:df

token:3,len:1,str:&

token:1,len:1,str:a

token:3,len:1,str:&

token:1,len:2,str:23

token:3,len:1,str:;

token:1,len:3,str:123

token:3,len:1,str:/

token:2,len:4,str:adfs

re2c使用小結(1)

re2c是乙個根據正規表示式子,生成對應c 的程式,類似於lex。使用的時候,他的功能比python的正規表示式功能要弱一點,一次只能解析乙個定義的符號,而且對於解析 這樣的表示式會產生越界錯誤。使用時要非常小心。初步總結如下。include include 定義符號 enum 掃瞄 使用re2c ...

SQLLoader 使用小結 3

在使用sqlloader的時候,可能遇到資料檔案多個,或者資料檔案格式不規範的情況,下面我們就要討論一下這些的解決辦法 1.遇到多個資料檔案 如果遇到多個資料檔案,同時要匯入一張表中,就可以使用多個infile 語句 2,pear,3.00,b 2 3,grape,6.00,c 5 4,banana...

Spring使用小結2

之前做過不少spring想過知識點內容的摘錄,spring框架的特點 模組組成 優缺點 spring相關的bean管理想過知識點及依賴注入方式 今天說下近端時間中專案中遇到的相關印象比較深的知識點 1.spring事務管理 要在對應spring配置檔案中配置要應用aop切面事務管理的包或具體的類,一...