一个SQL语句类似于
select * from table where contains(name,'xiaoming')>0;
关于识别'xiaoming'的规则,我的写法是
'[^'\n]*' {
yyless(yyleng);
if(yytext[yyleng]!='\''){
yylval.str = strdup((char*)yytext);return SCONST;
}else yymore();
}
这个写法是参照《lex与yacc》这本书上改写的
这个没问题,是可以识别,但只能识别单引号里面的字符本身没有'的情况
现在发现,在oracle下,若contains里面本身就带有单引号,例如想查询xiao'ming这个词的话,里面的单引号是可以通过双写单引号来达到转义的目的
即语句变为select * from table where contains(name,'xiao''ming')>0
这种情况的LEX识别规则应该怎么写?如果后面执行体不变的话,只是将前面的规则改为'[^\n]*'是不行的,我试过了
请各位大虾帮忙呀
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
mark!