当前位置:编程学习 > C#/ASP.NET >>

求一个数学正则表答式.非常感谢!

运算符:

   + - * / ^ ^2 ^3(三次方) 

符号

   ( )

数值:

    [\d]

参数

   这个参数是用户自己定义的,是在另一个页面中.
   比如定义 HK 20 ,HH 30 ,TestValue2 32  (HK ,HH 是用户自己定义的,跟定义变量的规则一样的)

这时用户会在这个页面中写一个数学表达式

 如: HK+109/(5^2)-10

     HH+HK/5*(HK^-1)

 如何使用正则判断上面的式子是正确的数据表达式呢?(这里没有小数和负数)

 帮大大们帮帮忙.谢谢了.

  --------------------编程问答-------------------- 难整,弄成表达式树,找找有没有现成的代码
--------------------编程问答-------------------- 确实挺难的...哪位大帮帮忙呀  --------------------编程问答-------------------- UP 下..哪位大大帮解决下呀  --------------------编程问答-------------------- 谢谢了 谢谢 --------------------编程问答-------------------- (HK|HH|[+\-*/^()]|\d+)+
这个意思么? --------------------编程问答-------------------- 挨着运算符的不一定是数据啊,比如(3+5)*(2+KK)^(2+HH) --------------------编程问答-------------------- 我主要是想用户输入的是数学算式 不是其他的东西。如 1++3(3-) 这样就是输入错误阿。1hh*1+1这也错。hh是一个直 1 后边得加运算符的。 --------------------编程问答-------------------- 好难,还是直接用try{}catch{}来判断比较省事 --------------------编程问答-------------------- ^(?!.+?([+\-*/^]|HK|HH|\d+)\1)(?!.+[+\-*/^]$)([+\-*/^]|HK|HH|\d+)+$
这样可以? --------------------编程问答--------------------
public static void Main()
{
    Console.WriteLine(IsValidFormula(new string[] { "HH", "HK" }, "1+HH*1+1"));//True
    Console.WriteLine(IsValidFormula(new string[] { "HH", "HK" }, "1+HH1*1+1"));//False
    Console.ReadKey();
}

public static bool IsValidFormula(string[] symbols, string test)
{
    //^(?!.+?(HK|HH|\d+){2,})(?!.+?([+\-*/^]|HK|HH|\d+)\2)(?!.+[+\-*/^]$)([+\-*/^]|HK|HH|\d+)+$
    StringBuilder builder = new StringBuilder();
    foreach (string symbol in symbols)
    {
        builder.Append(Regex.Escape(symbol) + "|");
    }
    builder.Append(@"\d+");
    string pattern = string.Format(@"^(?!.+?(?:{0}){{2,}})(?!.+?([+\-*/^]|{0})\1)(?!.+[+\-*/^]$)([+\-*/^]|{0})+$", builder.ToString());
    return Regex.IsMatch(test, pattern);
}
--------------------编程问答-------------------- --------------------编程问答-------------------- 我都没看懂,我明白上班试试。太感谢你了。。

那天我想了。如是有参数判断太麻烦。我可以把传来的HH KK呀 转换成一个数字。

因为我这里没有负数。是不是就能能判断些呐 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,