正则表达式学习笔记(一)——使用正则表达式的分析方法

一、使用正则表达式的分析方法

1、用自然语言来表达和说明你的意图
2、考虑数据源及其可能的内容
3、考虑可以使用的正则表达式选项
4、考虑灵敏度和特殊性
5、创建适当的正则表达式
6、对除了简单的正则表达式之外的正则表达式给予说明
7、使用空白区域保持正则表达式说明的清晰
8、测试正则表达式结果

1、使用自然语言来表达和说明你的意图

在人类设计的任何规划工作中,对需要解决的问题进行超出一般认知的、相当正式的表达都是极其重要的。
当正则表达式出现不适当的替换操作的原因可以归结为对要匹配什么没有给出足够精确的定义。(结果是使用了一个低特殊性的正则表达式)

所以,关键是要对问题给出更精确的说明。

注意:对问题定义不断修正的一句正是对所要使用数据源及其内容的理解

2、数据源及其可能的内容

正则表达式出现匹配失误时的一个重要原因就是:缺乏对要应用正则表达式的数据源的认真考量。
例如:  
对于都好分隔的机构化的数据文件,你会发现它的机构差异很小。
另一方面,如果是把按单词处理IDE文档作为数据源,就必须认真考虑诸如词与词之间的构成差别这样的问题。
1、可用的正则表达式选项       
要仔细区分程序员的编辑器对正则表达式的支持和程序员的编辑器可能支持的语言对正则表达式的支持。
2、灵敏度和特殊性
对要匹配的内容编写的正则表达式,要考虑到匹配的灵敏度——找到该内容的概率,特殊性——屏蔽其他内容的能力。

3、创建适当的正则表达式

当对需求进行了认真的分析,并且在对数据源 进行研究的基础上充分理解了数据内容的特点后,就能创建符合需求的正则表达式模式了。

不存在能够适合任何轻型的魔术公式,只有开发人员能够决定想匹配什么,不想匹配什么。

为了得到想要的结果,可能需要把文本操作分为两步来完成,但是,通过正则表达式结构的组合,一般都可以在一步之内完成匹配或替换操作。

4、对除简单正则表达式之外的正则表达式给予说明

清晰且完整的说明能避免浪费时间,并有效减轻自己的挫败感。


5、在创建更复杂的正则表达式时,考虑说明正则表达式的三方面内容:

(1)希望正则表达式做什么?


1、例如:

//用 Moon 替换 Star  

这样的注释描述,实际十分模糊。


2、另一种定义方法:

//如果Star 本身是一个词,用Moon 替换它

//如果Star 是某个词的一部分,那么保持不变


注意


如果对问题的定义反复修改几次,并且在反复过程的早期就编写了文档注释。

那么一定要确保在对正则表达式模式进行修改的同时,对这些文档注释进行更新。


如果文档注释无法反应你的思想变化,这种情况下有文档注释还不如没有。


(2)想选择什么匹配?


1、要尽可能恰如其分地表达出你想要匹配什么字符模式。

 养成规范地表达这种想法的习惯,全面地理解你真正想要的是什么。


2、正则表达式的作用是匹配某些字符序列,因此最好能明确地列举出想要匹配那个(些)字符序列


随时可能会把类似下面这些注释加到代码中:

//当 Star 作为   Star  Training  Company  的一部分时匹配Star
//当 Star 独立存在但表示  Star  Training  Company  时匹配Star
//比如像在  "Star  is  the  best" 这个短语中这样

//匹配任何所有格的  Star's


3、在明确的说明了你的目标是什么后,就可以更好地创建与你的意图严格相符的正则表达式模式了。


(3)不想选择什么匹配?


对数据源和要考虑创建的正则表达式模式理解得越充分,在注释中添加的说明也会越具体明确。


6、使用空白区域保持正则表达式说明的清晰

如果语法允许,可以利用空白区域来区分正则表达式中每个组件的注释内容,使注释内容更加清晰。


如果一条语句必须写在一行中,建议直接在正则表达式下方防止以分行形式编写的该正则表达式的一个副本作为注释。


7、测试正则表达式的结果


1、必须认真考虑自己想要选择的数据和要确保不会选择的类似数据。


2、只有在对要处理的实际数据和要实现怎样的修改进行认真思考的基础上,才有可能创建出真正有用的测试文档。


3、注意在处理数据量大的文本时,先把数据源备份,防止出现意外进行挽回。

在备份时,注意检查和测试备份是否有效可用。


由于对希望完成的文本操作任务有了充分理解,也就能够对问题作出适当的定义并将其转换成能够满足需求的、正确的正则表达式。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值