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

时间: 2024-07-28 15:24:16

Linux正则表达式-编写正则表达式的相关文章

linux 下的 正则表达式(awk,sed,awk)学习

一.正则表达式: 正则表达式(或称Regular Expression,简称RE)就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式. 该模式描述在查找文字主体时待匹配的一个或多个字符串. 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.简单的说,正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为, 正则表示式通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程序.vim.grep.find.awk.se

linux内的正则表达式

POSIX标准将正则表达式分为两类 >基本正则表达式 >扩展正则表达式 大部分linux应用和工具仅支持基本的正则表达式. ============基本的正则表达式元字符集合及其意义============ * 匹配0个或多个 . 匹配任意一个字符 ^ 匹配开头 $ 匹配结尾 [] 匹配字符集合 \ 转义字符 \<\> 精确匹配符号 \{n\} 匹配前面字符出现n次 \{n,\} 匹配前面的字符出现至少n次 \{n,m\} 匹配前面的字符n-m次 =================

linux笔记三 --正则表达式

前言:本篇博客的主要是记录学习过程中的正则表达式和sheel通配符. 内容: 1.shell通配符 通配符是基于bash解释器解析的,而正则表达式由正则引擎的软件(如awk,grep,sed等)解析,二者完全不同. * 表示匹配任意多个字符,0个到多个. ? 表示匹配任意一个字符. [] 表示选择其中的一个匹配. [-] 表示匹配一个范围中的一个字符.如:[a-z]匹配到a-z中的一个. [^]或[!] 表示不匹配其中的任意一个.如:[^a-z]不匹配其中的任意一个 实例(此处实例参考其他博客)

linux 中的正则表达式用法小结

首先:在linux中 ,正则表达式是针对文件内容而言的.查用在shell的grep,sed ,awk等相关命令之中. 正则表达式的元字符: .  : 表示任意字符 字符次数锚定: * : 表示* 之前的字符或模式出现任意次,其中包括0次 ?:   表示?之前的字符出现0次或一次,需要注意的是,在linux中需要是\?. \{m,n\}:表示其前面的字符或模式出现至少m次,至多n次 \{m,\}: 表示其前面的字符至少出现m次 \{0,n\}:表示其前面的字符至多出现n次 位置锚定: ^: 表示以

Linux学习之正则表达式&grep&egrep

我们经常需要在文档中搜索符合自己要求的内容,这些部分可能分散在文档的各个位置,各个角落.可以利用关键字例如/keyword或者?keyword一个一个的搜索,还有我可能不止想搜索关键字,而是指定一个范围,怎样操作?而且怎样把这些搜索到的内容集中地显示出来?使用正则表达式搜索字串的grep命令和egrep命令就可以满足我们的这个要求. 正则表达式(Regular Expression)是一种字符书写的模式,以行为单位进行字符的处理,透过一些特殊字符的辅助,利用这种模式可以轻易地达到对字符的搜索.删

php、linux、javascript 正则表达式学习基础总结

正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 文章来源于作者个人空间http://www.ilovehai.com PHP 正则表达式中包含三种元素分别为:量词.元字符.修饰符量词 语法                    描述+      

GNU/Linux平台上正则表达式的简单使用

友情提醒:本博文涉及的内容中涉及到的系统实践操作在Centos6.5上实现,GNU/Linux简称为linux,GNU/grep简称为grep,GNU/sed简称为sed,GNU/gawk简称为awk. -------------------------------------------------楔子--------------------------------------------- 小酒馆一角落,一胖三瘦围着方桌坐定,大快耳颐后正在唠嗑. 瘦子甲:"胖子,为什么要把正则表达式和lin

linux 命令grep正则表达式

Linux 命令grep正则表达式 在linux里面有处理文本的三剑,现在我要说的就是grep正则表达式的使用,正则表达式只是一种表示法,只要工具支持这种表示法,那么该工具就可以处理正则表达式的字符串.vi grep ,awk ,sed 等都支持正则表达式..正则表达式有基本正则表达式和扩展正则表达式. grep默认就是基本表达式. 基本正则表达式: 默认匹配次数:贪婪模式,尽可能多的去匹配. 扩展正则表达式:基于基本正则表达式多加了一些功能,基本一样. 1. grep命令 grep [参数]

php、linux、javascript 正则表达式

PHP 正则表达式中包含三种元素分别为:量词.元字符.修饰符量词 语法 描述 匹配任何至少包含一个前导字符串 匹配任何包含零个或多个前导字符串? 匹配任何包含零个或一个前导字符串. 匹配任意字符串{x} 匹配任何包含 x 个前导字符串{x,y} 匹配任何包含 x 到 y 个前导字符串{x,} 匹配任何包含至少 x 个前导字符串$ 匹配字符串的行尾^ 匹配字符串的行首| 匹配字符串的左边或者右边() 包围一个字符分组或定义个反引用,可以使用\1\2 提取 元字符 语法 描述[a-z] 匹配任何包含