求:全字匹配替换的正则表达式
求:全字匹配替换的正则表达式
例:s+((a+b+c)/d)*ab
替换规则:以+-*/()为分隔符
现象效果: 在替换a 时不要将后面的ab中的a也提换掉了。
//---------------
下面是我的写的代码:
实现功能将一个算术式转化成sql语句:
例如一个算式:((a+b-c)/d)+((s+B)/u)*user(其中的字符都是变量),我现在要将其中被+-*/还有括号风格开的字符替换成一个sql语句,而sql语句的条件就是变量。
替换结果:例如:a 被替换为 select code from text where name = 'a ';b 被替换为 select code from text where name = 'b ',后面的依次类推。
最后这个算式将被替换为:
((select code from text where name= 'a '+select code from text where name= 'b '-select code from text where name= 'c ')/select code from text where name= 'd ')+
((select code from text where name= 's '+select code from text where name= 'B ')/select code from text where name= 'u ')*select code from text where name= 'user '
//引用就不写了,下面是我写的程序
//编写语言为c#,中间不用考虑被除数为0,算式中的变量只会由字母和数字组成,不用考虑大小写。
//转化为sql
private string ChangeSql(string name)
{
string sql= "select code from text where name= ' "+ name + " ' ";
return sql;
}
//转化算术式
private string GetSql(string Arithmetic)
{
StringBuilder sqlstr = new StringBuilder();
sqlstr.Append(Arithmetic);
string[] sss = Regex.Splite(sqlstr.Tostring(),[\\+\\-\\*\/\\(\\)]); //存放被+ - * / ( )分割的变量
string[] kkk = new string[sss.Lenght]; // 存放转化后的sql用于替换公式中的变量
int i=0;
foreach(string u in sss)
{
kkk[i]=ChangeSql(u);//调用转化为sql的函数并保存到kkk数组中
i++;
}
i=0;
foreach(string t in sss) //将变量替换为“[ 数字 ]”,用于下面替换sql好定位
{
sqlstr.Replace(t, "[ "+ i + "] ");
i++;
}
sss = Regex.Splite(sqlstr.Tostring(),[\\+\\-\\*\/\\(\\)]); //存放被+ - * / ( )分割的变量;
i=0;
foreach(string h in sss) //替换变量为sql
{
sqlstr.Replace( "[ "+ i + "] " , kkk[i]);
i++;
}
return sqlstr.Tostring();
}
上面的代码错误在这个位置:
i=0;
foreach(string t in sss) //将变量替换为“[ 数字 ]”,用于下面替换sql好定位
{
sqlstr.Replace(t, "[ "+ i + "] ");
i++;
}
假如sqlstr存放的字符串为: (a+ab)/abc,那么在替换第一个变量“a”时他会将后面的ab 和abc中的a 都替换掉。
现在我的困难就在这里,我不知道怎么样在替换的时候进行全字匹配替换。求一个全字匹配的正则表达式
------解决方案-----