正则表达式的表达,将匹配特定格式的字符串

问题描述:

我有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; 
} 
+1

你使用什么样的工具?在RegExp的一些实现中有所不同。 –

+0

我正在使用Flex的正则表达式。 –

+0

ActionScript?让我看看代码。 –

"ORDER BY DESC"([^)]*) could be a solution for this question.