日期:2014-05-19  浏览次数:21157 次

求:全字匹配替换的正则表达式
求:全字匹配替换的正则表达式
例: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   都替换掉。
现在我的困难就在这里,我不知道怎么样在替换的时候进行全字匹配替换。求一个全字匹配的正则表达式

------解决方案-----