码迷,mamicode.com
首页 > 系统相关 > 详细

Linux正则表达式-编写正则表达式

时间:2015-05-27 22:59:39      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:正则表达式   编写正则表达式   linux正则表达式   

为了所有实用化的用途,你可以通过使用程序产生正确的结果。然而,并不意味着程序总是如你所愿的那样正确地工作。多数情况下,如果程序不能产生想要的输出,可以断定真正的问题(排除输入或语法错误)在于如何描述想要的东西。

换句话说,应该考虑纠正问题的地方是描述想要的结果的表达式。表达式不完整或者公式表示得不正确。例如,如果程序计算下面的表达式:
PAY = WEEKLY_SALARY * 52

并知道这些变量的值,它将计算出正确的结果。但是有人会反对,因为公式没有说明销售人员,他也得到了一份佣金。所以为了描述这种情况,这个表达式需要重新用公式表示为:
PAY = WEEKLY_SALARY * 52 + COMMISSION

也许你会认为,编写第一个表达式的人没有完全理解问题所涉及的范围,因此不能很好地进行描述。知道如何详细的进行描述是很重要的。如果请求某人为你拿一本书,而且如果摆在面前有很多书,那么就需要更加明确地描述你想要的书(或者满足与不确定的选择过程)。

这同样适用于正则表达式。程序(例如grep)简单而且容易使用。理解正则表达式的元素也不难。正则表达式允许编写简单的或复杂的模式描述。而使编写正则表达式很难(和有趣)的因素是应用的复杂性:模式出现在各种不同的情况和上下文中。复杂性是语言本身所固有的,就像你并不总能通过查询字典来获得某个语义的正确理解一样。

编写正则表达式的过程涉及3个步骤:
1.知道要匹配的内容以及它如何出现在文本中。
2.编写一个模式来描述要匹配的内容。
3.测试模式来查看它匹配的内容。

这个过程实质上与程序员开发程序的过程相似。步骤1可以当作规范,它反映理解要解决的问题以及如何解决它。步骤2类似于编写程序代码,而步骤3相当于运行程序并根据规范测试它。步骤2和步骤3需重复进行,知道程序令人满意为止。

对匹配描述进行测试可以确保这个描述和所期待的一样。它通常揭示一些令人惊奇的事。仔细检查测试的结果、比较输出和输入,这可以大大地提高对正则表达式的理解。可以按下面的方式解析模式匹配的结果:
Hits (击中)
--这是我想要匹配的行。
Misses (未击中)
--这是我不想匹配的行。
Omissions (遗漏)
--这是我不能匹配但想要匹配的行。
False alarms (假警报)
--这是我不想匹配的但却匹配了的行。

尝试完善模式的描述也可以从对立段解决;可以试着通过限制可能的匹配来排错假警报,通常扩展可能的匹配来试着捕获遗漏。

当你必须使用固定的字符串描述模式时,困难尤其明显。从固定字符串的模式中删除每个字符都会增加可能的匹配数量。例如,当搜索字符串"what" 时,还决定匹配"What",那么同时匹配"What"和"what"的惟一的固定字符串模式是"hat",即两者共用的最长的字符串。显然,搜索"hat"将产生不想要的匹配。给固定字符串模式添加每个字符都可能减少匹配数量。字符串"them" 通常比字符串"the"产生的匹配更少。

参考资料:http://www.linuxawk.com/communication/409.html

Linux正则表达式-编写正则表达式

标签:正则表达式   编写正则表达式   linux正则表达式   

原文地址:http://blog.csdn.net/xiyangyang052/article/details/46050965

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!