之前兩篇學習文章,雖然可以滿足一些要求,但是對於十分複雜的正規表示式還是無能為力。
比如現實當中某,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切面事務管理的包或具體的類,一...