算术运算表达式正则及分析

简介:

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>

相关链接:http://topic.csdn.net/t/20051227/16/4484337.html
Regex regex = new Regex(@"
^ (?#匹配开头)
[-+]? (?#开头可以出现正负号)
([0-9]+($|[-+*/]))* (?#可选数-符号-数-符号-……-数-符号或结尾)
(
(
(?\() (?#左括号,保存到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]+($|[-+*/]))*(((?\()[-+]?([0-9]+[-+*/])*)+[0-9]+((?<-o>\))([-+*/][0-9]+)*)+($|[-+*/]))*(?(o)(?!))(?<=[0-9)])$





本文转自 netcorner 博客园博客,原文链接: http://www.cnblogs.com/netcorner/archive/2008/09/27/2912107.html  ,如需转载请自行联系原作者

相关文章
|
Ubuntu
解决办法:apt: 未找到命令
解决办法:apt: 未找到命令
2569 0
|
应用服务中间件 网络安全 nginx
Nginx配置Websocket
wss协议实际是websocket+SSL,就是在websocket协议上加入SSL层,类似https(http+SSL)。
|
编解码 开发工具 UED
QT Widgets模块源码解析与实践
【9月更文挑战第20天】Qt Widgets 模块是 Qt 开发中至关重要的部分,提供了丰富的 GUI 组件,如按钮、文本框等,并支持布局管理、事件处理和窗口管理。这些组件基于信号与槽机制,实现灵活交互。通过对源码的解析及实践应用,可深入了解其类结构、布局管理和事件处理机制,掌握创建复杂 UI 界面的方法,提升开发效率和用户体验。
503 13
|
存储 算法 UED
数据结构之网络流量路径分析(BFS)
网络流量路径分析利用BFS算法在网络图中寻找从源节点到目标节点的最短路径,帮助识别网络瓶颈、优化数据流,提升网络性能。本示例通过构建一个无向图,展示了如何使用BFS算法进行路径分析,找到从节点0到节点5的有效路径,验证了算法的实用性和有效性。
333 0
|
网络协议 Ubuntu Linux
Linux系统之mtr命令的基本使用
【7月更文挑战第5天】Linux系统之mtr命令的基本使用
406 4
|
消息中间件 NoSQL Kafka
订单超时取消的11种方式(非常详细清楚)
订单超时取消的11种方式(非常详细清楚)
8170 5
订单超时取消的11种方式(非常详细清楚)
|
SQL Java 数据库连接
Mybatis的Cursor如何避免OOM异常
在 Mybatis 中,`Cursor` 是一个特殊对象,用于避免大量数据查询时导致的 OOM 错误。它通过懒加载和迭代器实现内存友好型数据处理,尤其适用于大规模数据查询。使用时只需将 Mapper 文件中的方法返回值设为 `Cursor&lt;T&gt;`。其原理在于操作原生 `Statement` 并按需获取数据,而非一次性加载所有数据,从而避免内存溢出。
593 3
|
存储 分布式计算 OLAP
Apache Paimon统一大数据湖存储底座
Apache Paimon,始于Flink Table Store,发展为独立的Apache顶级项目,专注流式数据湖存储。它提供统一存储底座,支持流、批、OLAP,优化了CDC入湖、流式链路构建和极速OLAP查询。Paimon社区快速增长,集成Flink、Spark等计算引擎,阿里巴巴在内部广泛应用,旨在打造统一湖存储,打通Serverless Flink、MaxCompute等,欢迎大家扫码参与体验阿里云上的 Flink+Paimon 的流批一体服务。
19711 8
Apache Paimon统一大数据湖存储底座
|
SQL 存储
数据权限就该这么实现(实践篇),yyds!
数据权限就该这么实现(实践篇),yyds!
1146 0
|
安全 Java 大数据
Java并发编程实战指南
在Java开发中,随着多核处理器的普及,并发编程已经成为提升应用程序性能的重要手段。本文将深入探讨Java并发编程的核心概念和技术,包括线程、锁、原子变量以及并发工具类等,并通过实际案例展示如何在Java中有效地实现并发控制和同步管理。
428 0