软件工程

本类阅读TOP10

·PHP4 + MYSQL + APACHE 在 WIN 系统下的安装、配置
·Linux 入门常用命令(1)
·Linux 入门常用命令(2)
·使用 DCPROMO/FORCEREMOVAL 命令强制将 Active Directory 域控制器降级
·DirectShow学习(八): CBaseRender类及相应Pin类的源代码分析
·基于ICE方式SIP信令穿透Symmetric NAT技术研究
·Windows 2003网络负载均衡的实现
·一网打尽Win十四种系统故障解决方法
·数百种 Windows 软件的免费替代品列表
·收藏---行百里半九十

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
第一次学习正则表达式心得!

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

      由于客户的需求,我今天第一次学习使用了正则表达式。下面把握的心得写书来跟大家分享。

早期起源

    正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。

    1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。

    随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。

    如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。

一些语法定义
    \S :匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
    \d :匹配一个数字字符。等价于 [0-9]。
    (pattern ) :匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在 JScript 中则使用 $0$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
    \. :转义字符,其实就是在匹配“.“。
    .  :匹配除换行符 \n之外的任何单字符。
    + :匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。

我遇到的问题
    客户跑过来对我说,你看你们想数据库里面存储数据的时候把我打的利率后面的千分号都没存进去。
.......我冤哪!我有不是非要把你的千分号不往里面存,是你自己打字的时候有问题。呜呜!
    不过客户有需求我们就要满足,没有条件满足制造条件也要满足。于是我想到了正则表达式。
  
解决方法
    原始字符串:
    "条件符合,讨论意见被通过。fwerfweqfewfverwfewrfwefwefsvdfsa利率abc4.02369huh7437ghrfbvyue"
    现在要将上面字符串里面的数字”4.02369”替换成”4.02369‰”。
    分析这个句子,我们发现该数字出现的位置是固定的,在利率后面出现的第一个小数就是了。所以依照这个方法创建正则表达式为:“利率\S+(\d\.\d+)”
    具体的程序代码如下:

using System.Text.RegularExpression;
private string RegexRep() 
{
    string ss = "条件符合,讨论意见被通过。fwerfweqfewfverwfewrfwefwefsvdfsa利率abc4.02369huh7437ghrfbvyue";
    string exp = @"利率\S+(\d\.\d+)";//这串正则表达式匹配的就是字符串ss中的“利率abc4.02369”一段话。
    Regex r  = new Regex(exp,RegexOptions.IgnoreCase);
    string a = Regex.Replace(ss,exp,new MatchEvaluator(this.myMatch));
    return(a);
}
private string myMatch(Match m)
{
    string x = m.ToString();
    return x + "%";//将字符串结尾加一个千分号然后返回
}
//此代码在VisualStudio.NET调试通过。
其中更详细的方法调用的参数解释请大家参照MSDN
.NetDevelopment->.NetFrameWork->Reference->Class Library->System.Text.RegularExpression

结论
    至此问题圆满解决,不过最后我们还是说服用户不采纳这种解决方法。因为,呵呵,谁知道哪天用户心血来潮会在文本框里面输入什么东西呢!万一匹配错误,我们就是跳进黄河里面也洗不清呀!

 



相关文章

相关软件