0
我有ORDER BY DESC(?year)
其中?year
可以是任何東西,接着一個問號(?)
如?名?地址等我都試過ORDER BY DESC\(\?[a-z]+\)
捕獲整個字符串作爲ORDER BY DESC(?year)
線但不工作。正則表達式的表達,將匹配特定格式的字符串
法文件:
%{
#include <cstdio>
#include <iostream>
#include "grammar.tab.h"
%}
%option case-insensitive
%%
[1-9][0-9]* { yylval.i = atoi(yytext); return INT_NUM; }
"ORDER BY DESC\(\?[a-z]+\)" { yylval.s = strdup(yytext); return ORDER_BY_DESC; }
"\n" { yylineno++; }
\. { return DOT; }
[ \t]+ { /* ignore white space */ }
"#".* { /* ignore comments */ }
[ \t\v\f\r]+ { }
. { std::cerr << "Lexical Error!\n"; }
%%
int yywrap() {
return 1;
}
野牛文件:
%{
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <sstream>
#include <string>
#include <regex>
using namespace std;
extern int yylineno;
extern int yylex();
void yyerror(char *s, ...);
%}
%error-verbose
%union
{
int i;
char *s;
}
%token<i> INT_NUM;
%token<s> ORDER_BY_DESC;
%%
order_by:
| ORDER_BY_DESC
{
string s($<s>1);
string str = s.substr(0, s.size() - 1);
char *x = new char[str.length() + 1];
order_by_stmt = str;
strcpy(x, str.c_str());
$<s>$ = x;
}
;
%%
void yyerror(char *s, ...) {
va_list ap;
va_start(ap, s);
fprintf(stderr, "%d: error: ", yylineno);
vfprintf(stderr, s, ap);
fprintf(stderr, "\n");
}
int main() {
yyparse();
return 0;
}
你使用什麼樣的工具?在RegExp的一些實現中有所不同。 –
我正在使用Flex的正則表達式。 –
ActionScript?讓我看看代碼。 –