分享
 
 
 

第一次学习正则表达式心得!

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

早期起源

正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。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

结论

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有