之前两篇学习文章,虽然可以满足一些要求,但是对于十分复杂的正则表达式还是无能为力。
比如现实当中某,URL的格式定义如下
dvb://<original_network_id>.<transport_stream_ id>.<service_id>[.<component_tag>{&<component_tag>}][;<event_id>]{/<path-element>}
如何正确解析这样的URL,用上面两种方法显然不行。
我这里想到一种方法,二遍搜素。第一遍匹配正则,第二遍再做分解字符串。
这里要用到goto语句。
#include <stdio.h>
#include <stdlib.h>
/*
* 定义符号
*/
enum{
T_EOL = -1,
T_DVB,
T_HEX,
T_ID,
T_CUT,
T_UNKNOWN,
};
/*!types:re2c */
/*
* 扫描
* dvb://<original_network_id>.<transport_stream_ id>.<service_id>[.<component_tag>{&<component_tag>}][;<event_id>]{/<path-element>}
*/
static enum ScanContition cond = 0;
int scan(char *buf, int *length){
#define YYCTYPE char
YYCTYPE * YYCURSOR = buf;
Y