使用正则表达式实现简易表达式计算器
由于我是做工程的,在实际使用中经常要对复杂公式进行计算,觉得使用windows计算器非常不方便,也容易出错,而matlab用于小型的计算太浪费(主要是启动比较慢,而且不是所有地方都有),因此决定自己写一个表达式计算器进行使用。在写计算器的过程中,研究了.NET的正则表达式系统,略有心得。将其写出来与大家分享。
注:实际完成的表达式计算器可在我的115共享上下载,基于了.NET2.0版。同时也提供了一个.NET 2.0 Compact Framework的版本,可以用于Windows Mobile手机,实测在Windows Mobile 6.1和Windows Mobile 6.5上运行正常。
在工程应用中,用到最多的就是整数的位运算,与或非异或移位等操作非常频繁,且经常会有连续操作。特别是在通信控制中,经常使用的校验(采用累加或异或的方式),要计算也较多,因此首先考虑了整数的表达式计算,后续考虑了双精度数据的计算。
1. .NET Framework正则表达式概述(本节内容来自Microsoft MSDN )
正则表达式提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法使您可以快速分析大量文本以找到特定的字符模式;验证文本以确保它匹配预定义的模式(如电子邮件地址);提取、编辑、替换或删除文本子字符串;将提取的字符串添加到集合以生成报告。对于处理字符串或分析大文本块的许多应用程序而言,正则表达式是不可缺少的工具。
正则表达式的工作方式
使用正则表达式处理文本的中心构件是正则表达式引擎,该引擎在 .NET Framework 中由System.Text.RegularExpressions. Regex 对象表示。使用正则表达式处理文本至少要求向该正则表达式引擎提供以下两方面的信息: 在 .NET Framework 中,正则表达式模式用特殊的语法或语言定义,该语法或语言与 Perl 5 正则表达式兼容,并添加了一些其他功能,例如从右到左匹配。有关更多信息,请参见正则表达式语言元素。 Regex类的方法使您可以执行以下操作: 通过调用IsMatch方法确定输入文本中是否具有正则表达式模式匹配项。有关使用IsMatch方法验证文本的示例,请参见如何:验证字符串是否为有效的电子邮件格式。
通过调用Match或Matches方法检索匹配正则表达式模式的一个或所有文本匹配项。第一个方法返回提供有关匹配文本的信息的Match对象。第二个方法返回MatchCollection对象,该对象对于在分析的文本中找到的每个匹配项包含一个Match对象。
通过调用Replace方法替换匹配正则表达式模式的文本。有关使用Replace方法更改日期格式和移除字符串中的无效字符的示例,请参见如何:从字符串中剥离无效字符和示例:更改日期格式。
***详细的.NET正则表达式使用请参见Microsoft MSDN
2. 整数表达式运算的实现
2.1需求分析
首先要确定整数表达式运算需要实现哪一些功能。根据实际情况,当前确定整数表达式运算至少应该支持如下功能:
由于我是做工程的,在实际使用中经常要对复杂公式进行计算,觉得使用windows计算器非常不方便,也容易出错,而matlab用于小型的计算太浪费(主要是启动比较慢,而且不是所有地方都有),因此决定自己写一个表达式计算器进行使用。在写计算器的过程中,研究了.NET的正则表达式系统,略有心得。将其写出来与大家分享。
注:实际完成的表达式计算器可在我的115共享上下载,基于了.NET2.0版。同时也提供了一个.NET 2.0 Compact Framework的版本,可以用于Windows Mobile手机,实测在Windows Mobile 6.1和Windows Mobile 6.5上运行正常。
在工程应用中,用到最多的就是整数的位运算,与或非异或移位等操作非常频繁,且经常会有连续操作。特别是在通信控制中,经常使用的校验(采用累加或异或的方式),要计算也较多,因此首先考虑了整数的表达式计算,后续考虑了双精度数据的计算。
1. .NET Framework正则表达式概述(本节内容来自Microsoft MSDN )
正则表达式提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法使您可以快速分析大量文本以找到特定的字符模式;验证文本以确保它匹配预定义的模式(如电子邮件地址);提取、编辑、替换或删除文本子字符串;将提取的字符串添加到集合以生成报告。对于处理字符串或分析大文本块的许多应用程序而言,正则表达式是不可缺少的工具。
正则表达式的工作方式
使用正则表达式处理文本的中心构件是正则表达式引擎,该引擎在 .NET Framework 中由System.Text.RegularExpressions. Regex 对象表示。使用正则表达式处理文本至少要求向该正则表达式引擎提供以下两方面的信息: 在 .NET Framework 中,正则表达式模式用特殊的语法或语言定义,该语法或语言与 Perl 5 正则表达式兼容,并添加了一些其他功能,例如从右到左匹配。有关更多信息,请参见正则表达式语言元素。 Regex类的方法使您可以执行以下操作: 通过调用IsMatch方法确定输入文本中是否具有正则表达式模式匹配项。有关使用IsMatch方法验证文本的示例,请参见如何:验证字符串是否为有效的电子邮件格式。
通过调用Match或Matches方法检索匹配正则表达式模式的一个或所有文本匹配项。第一个方法返回提供有关匹配文本的信息的Match对象。第二个方法返回MatchCollection对象,该对象对于在分析的文本中找到的每个匹配项包含一个Match对象。
通过调用Replace方法替换匹配正则表达式模式的文本。有关使用Replace方法更改日期格式和移除字符串中的无效字符的示例,请参见如何:从字符串中剥离无效字符和示例:更改日期格式。
***详细的.NET正则表达式使用请参见Microsoft MSDN
2. 整数表达式运算的实现
2.1需求分析
首先要确定整数表达式运算需要实现哪一些功能。根据实际情况,当前确定整数表达式运算至少应该支持如下功能: