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)])$
  • 相关阅读:
    模型评估方法
    欠拟合、过拟合、偏差、方差
    机器学习基本概念
    Hive 的基本概念
    Flume的Channel
    Flume的Sink
    Flume的Source
    Flume 安装和配置
    Flume的基本概念
    BIO & NIO & NIO常见框架
  • 原文地址:https://www.cnblogs.com/netcorner/p/2912107.html
Copyright © 2011-2022 走看看