zoukankan      html  css  js  c++  java
  • 算术运算表达式正则及分析

    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>
    相关链接:http://topic.csdn.net/t/20051227/16/4484337.html
    Regex regex = new Regex(@"
    ^ (?#匹配开头)
    [-+]? (?#开头可以出现正负号)
    ([0-9]+($|[-+*/]))* (?#可选数-符号-数-符号-……-数-符号或结尾)
    (
    (
    (?<o>\() (?#左括号,保存到o名字下)
    [-+]? (?#可选正负号)
    ([0-9]+[-+*/])* (?#可选数-符-数-符……)
    )+ (?#可以重复出现左括号)
    [0-9]+ (?#左右括号之间最起码需要一个操作数)
    (
    (?<-o>\)) (?#右括号,匹配的同时去掉一个左括号)
    ([-+*/][0-9]+)* (?#可选符-数-符-数……)
    )+ (?#可以重复出现右括号,仅当还有左括号剩余)
    ($|[-+*/]) (?#要么结尾,要么在下一个左括号出现之前出现一个运算符)
    )* (?#重复出现左括号)
    (?(o)(?!)) (?#如果还有左括号剩余就不匹配任何东西)
    (?<=[0-9)]) (?#检查结尾前是否数字或右括号)
    $ (?#匹配结尾)
    ", RegexOptions.IgnorePatternWhitespace);
    string[] tests = new string[] {
    "1",
    "1+23",
    "1+23*456",
    "1*(23+456)",
    "(3)",
    "((67+8)*9+10)/11",
    "12+(13*)",
    "()",
    "((3)",
    "(3))",
    "+3",
    "5*(4+3/(-2))",
    "(5*(4+3/(-2))",
    "5*(4+3/(-2)))",
    "+3*",
    "+(4)+(-5)",
    "+(4)(5)",
    };
    foreach (string s in tests)
    Console.WriteLine("{0}: {1}", regex.IsMatch(s) ? "Good" : " Bad", s);
    Console.ReadKey();  
    完整正则应为:^[-+]?([0-9]+($|[-+*/]))*(((?<o>\()[-+]?([0-9]+[-+*/])*)+[0-9]+((?<-o>\))([-+*/][0-9]+)*)+($|[-+*/]))*(?(o)(?!))(?<=[0-9)])$
  • 相关阅读:
    网页制作--标签,表格,表单,框架
    sql数据库框架
    数据库的触发器
    数据库的复制与附加
    sql数据库随笔
    sql常用函数
    sql数据类型、约束
    sql数据库查询
    数据库增删改查
    数据库基本概念
  • 原文地址:https://www.cnblogs.com/netcorner/p/2912107.html
Copyright © 2011-2022 走看看