我有這樣的正則表達式:正則表達式不帶符號
[-a-zA-Z0-9"_/.!\*\+\<\>\{\}$#\[\]]*
這是用來匹配空間這樣的分隔的單詞:
eyes
yellow
9+3
goin$crazy
mou{s}e
不幸的是,也符合這樣的字符串:
a${try}b
我希望匹配相同的單詞,但避免包含序列「$ {」的所有單詞。我該怎麼做?
編輯
這是做一個單一的正則表達式真的很重要,因爲這樣的事實,我需要這個正則表達式可以用來定義柔性令牌。
這裏是Flex代碼:
%option noyywrap
%option prefix="exp"
%{
#include <stdio.h>
#include <stdlib.h>
#include "expr.tab.h"
char *p;
extern int yywrap(void);
%}
NUM [0-9]+
STR <HERE HAVE TO BE INSERTED THE REGEX I NEED>
VAR $\{[-a-zA-Z][-a-zA-Z0-9]*\}
%%
= { /*printf("EQ\n");*/ return EQ; }
\) { /*printf("RPAREN\n");*/ return RPAREN; }
\( { /*printf("LPAREN\n");*/ return LPAREN; }
\} { /*printf("KET\n");*/ return KET; }
\{ { /*printf("BRA\n");*/ return BRA; }
"]" { /*printf("RSBRA\n");*/return RSBRA; }
: { /*printf("COLON\n");*/ return COLON; }
; { /*printf("SEMICOLON\n");*/ return SEMICOLON; }
, { /*printf("COMMA\n");*/ return COMMA; }
"=>" { /*printf("ARROW\n");*/ return ARROW; }
\| { /*printf("PIPE\n");*/return PIPE; }
@ { /*printf("AT\n");*/return AT; }
& { /*printf("AND\n");*/return AND; }
"${" { /*printf("VARBEGIN\n");*/return VARBEGIN;}
"$[" { /*printf("EXPRINIT\n");*/return EXPRINIT;}
"!=" { /*printf("NOTEQ\n");*/return NOTEQ; }
"==" {/*printf("EQUAL\n");*/return EQUAL;}
">" { /*printf("GT\n");*/return GT; }
"<" { /*printf("LT\n");*/return LT; }
">=" { /*printf("GTEQ\n");*/return GTEQ; }
"<=" { /*printf("LTEQ\n");*/return LTEQ; }
"+" { /*printf("PLUS\n");*/return PLUS; }
"-" { /*printf("MINUS\n");*/return MINUS; }
"*" { /*printf("MULT\n");*/return MULT; }
"/" { /*printf("DIV\n");*/return DIV; }
"%" { /*printf("MOD\n");*/return MOD; }
"!" { /*printf("LOGNOT\n");*/return LOGNOT; }
"=~" { /*printf("LIKEOP\n");*/return LIKEOP; }
"?" { /*printf("CONDQUEST\n");*/return CONDQUEST; }
{NUM} {
/*printf("VARNAME (%s)\n",yytext);*/
p = (char*)calloc(strlen(yytext)+1,sizeof(char));
strcpy(p,yytext);
yylval = (YYSTYPE)p;
return NUM;
}
{VAR} {
/*printf("VARNAME (%s)\n",yytext);*/
p = (char*)calloc(strlen(yytext)+1,sizeof(char));
strcpy(p,yytext);
yylval = (YYSTYPE)p;
return VAR;
}
{STR} {
/*printf("VARNAME (%s)\n",yytext);*/
p = (char*)calloc(strlen(yytext)+1,sizeof(char));
strcpy(p,yytext);
yylval = (YYSTYPE)p;
return STR;
}
%%
EDIT 2 我創造了這個規則,它似乎工作,但不是完美的,因爲它不能夠匹配僅包含字符串「$ 「或只有字符」{「。
(\$[-a-zA-Z0-9"_/.!\*\+\<\>#$}\[\]]|\{[-a-zA-Z0-9"_/.!\*\+\<\>#\$\{}\[\]]|[-a-zA-Z0-9"_/.!\*\+\<\>#}\[\]])*
我無法理解您對單詞的定義。 – FailedDev
在這種情況下,只是一個字符序列匹配的正則表達式,我已經發布,但我想迫使它不包含字符序列「$ {」 –