正则表达式的表达,将匹配特定格式的字符串
问题描述:
我有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;
}
答
"ORDER BY DESC"([^)]*) could be a solution for this question.
你使用什么样的工具?在RegExp的一些实现中有所不同。 –
我正在使用Flex的正则表达式。 –
ActionScript?让我看看代码。 –