这个问题与此有关:Using regex to pass syntax-valid c++ declaration/initialization感谢Jerry的回答。
但现在程序流程已经重新设计。它现在将检查每种数据类型的声明语法。
//found int
if( /+sint$/.test(kword_search)){
//syntax check
if( //*modified regex for int declaration checking*//.test(kword_syntax_search) ){
//no error in int;
}
}
//found char
if( /+schar$/.test(kword_search)){
//syntax check
if( //*modified regex for char declaration checking*//.test(kword_syntax_search) ){
//no error in char;
}
}
//found float
if( /+sfloat$/.test(kword_search)){
//syntax check
if( //*modified regex for float declaration checking*//.test(kword_syntax_search) ){
//no error in float;
}
}
//found bool
if( /+sbool$/.test(kword_search)){
//syntax check
if( //*modified regex for bool declaration checking*//.test(kword_syntax_search) ){
//no error in bool;
}
}
所以,基本上以前的答案是这样使用的:
//found int|char|bool|float
if( /+s(?:int|float|char|bool)$/.test(kword_search)){
//syntax check
if( /^(?:\s*[A-Za-z_][A-Za-z0-9]*\s*(?:=\s*(?:[A-Za-z0-9]+(?:[+\/*-][A-Za-z0-9]+)?|[0-9]+(?:\.[0-9]+)?(?:[+\/*-][0-9]+(?:\.[0-9]+)?)?|"[^"]*"|'[^']*'))?\s*,)*\s*[A-Za-z_][A-Za-z0-9]*\s*(?:=\s*(?:[A-Za-z0-9]+(?:[+\/*-][A-Za-z0-9]+)?|[0-9]+(?:\.[0-9]+)?(?:[+\/*-][0-9]+(?:\.[0-9]+)?)?|"[^"]*"|'[^']*'))?\s*;/.test(kword_syntax_search) ){
//no error in declaration/initialization by mixing them;
}
}
我需要一些帮助来将此正则表达式切碎为 4 组正则表达式,专门用于评估第一块代码中的 int、char、float 和 bool(Jerry的回答):
^(?:\s*[A-Za-z_][A-Za-z0-9]*\s*(?:=\s*(?:[A-Za-z0-9]+(?:[+\/*-][A-Za-z0-9]+)?|[0-9]+(?:\.[0-9]+)?(?:[+\/*-][0-9]+(?:\.[0-9]+)?)?|"[^"]*"|'[^']*'))?\s*,)*\s*[A-Za-z_][A-Za-z0-9]*\s*(?:=\s*(?:[A-Za-z0-9]+(?:[+\/*-][A-Za-z0-9]+)?|[0-9]+(?:\.[0-9]+)?(?:[+\/*-][0-9]+(?:\.[0-9]+)?)?|"[^"]*"|'[^']*'))?\s*;
http://regex101.com/r/aD2hA6
我的目标是在我的代码编辑器中告诉这个字符串输入是否在语法上有效
整数a,b,_ab;//valid
整数a=0,b=333; //valid
整数a, b=; //not valid
整数a,,b,,; //not valid
整数1var; //not valid
整数a='sts', b=false, c=23.0 // not valid
漂浮a,b;//valid
漂浮a=2, a=3.33//valid
漂浮a='sfsdf';//not valid
漂浮a==3;//not valid
漂浮a,, b=3.0//not valid
字符a, b;//valid
字符a='a', b='!', c='3';//valid
字符a='ab';//not valid
字符a,b=3;//not valid
字符a,b="a";//not valid
布尔a=true, b=false;
布尔a="true"; //not valid
(明白了吗?)
再次......我知道正则表达式不是这样做的正确方法。谢谢