`
9hguslo
  • 浏览: 20047 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

第 32 章 正则表达式

阅读更多

  以前我们用grep在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义。其实grep还可以找出符合某个模式(Pattern)的一类字符串。例如找出所有符合xxxxx@xxxx.xxx模式的字符串(也就是email地址),要求x字符可以是字母、数字、下划线、小数点或减号,email地址的每一部分可以有一个或多个x字符,例如abc.d@ef.com、1_2@987-6.54,当然符合这个模式的不全是合法的email地址,但至少可以做一次初步筛选,筛掉a.b、c@d等肯定不是email地址的字符串。再比如,找出所有符合yyy.yyy.yyy.yyy模式的字符串(也就是IP地址),要求y是0-9的数字,IP地址的每一部分可以有1-3个y字符。 如果要用grep查找一个模式,如何表示这个模式,这一类字符串,而不是一个特定的字符串呢?从这两个简单的例子可以看出,要表示一个模式至少应该包含以下信息: 字符类(Character Class):如上例的x和y,它们在模式中表示一个字符,但是取值范围是一类字符中的任意一个。 数量限定符(Quantifier): 邮件地址的每一部分可以有一个或多个x字符,IP地址的每一部分可以有1-3个y字符 各种字符类以及普通字符之间的位置关系:例如邮件地址分三部分,用普通字符@和.隔开,IP地址分四部分,用.隔开,每一部分都可以用字符类和数量限定符描述。为了表示位置关系,还有位置限定符(Anchor)的概念,将在下面介绍。 规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)。例如email地址的正则表达式可以写成[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+,IP地址的正则表达式可以写成[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}。下一节介绍正则表达式的语法,我们先看看正则表达式在grep中怎么用。例如有这样一个文本文件testfile: 查找其中包含IP地址的行: egrep相当于grep -E,表示采用Extended正则表达式语法。grep的正则表达式有Basic和Extended两种规范,它们之间的区别下一节再解释。另外还有fgrep命令,相当于grep -F,表示只搜索固定字符串而不搜索正则表达式模式,不会按正则表达式的语法解释后面的参数。 注意正则表达式参数用单引号括起来了,因为正则表达式中用到的很多特殊字符在Shell中也有特殊含义(例如\),只有用单引号括起来才能保证这些字符原封不动地传给grep命令,而不会被Shell解释掉。 192.168.1.1符合上述模式,由三个.隔开的四段组成,每段都是1到3个数字,所以这一行被找出来了,可为什么1234.234.04.5678也被找出来了呢?因为grep找的是包含某一模式的行,这一行包含一个符合模式的字符串234.234.04.567。相反,123.4234.045.678这一行不包含符合模式的字符串,所以不会被找出来。(存在这种可能,而后者四个数字4234在中间无法匹配到这种模式) grep是一种查找过滤工具,正则表达式在grep中用来查找符合模式的字符串。其实正则表达式还有一个重要的应用是验证用户输入是否合法,例如用户通过网页表单提交自己的email地址,就需要用程序验证一下是不是合法的email地址,这个工作可以在网页的Javascript中做,也可以在网站后台的程序中做,例如PHP、Perl、Python、Ruby、Java或C,所有这些语言都支持正则表达式,可以说,目前不支持正则表达式的编程语言实在很少见。除了编程语言之外,很多UNIX命令和工具也都支持正则表达式,例如grep、vi、sed、awk、emacs等等。"正则表达式"就像"变量"一样,它是一个广泛的概念,而不是某一种工具或编程语言的特性。
分享到:
评论

相关推荐

    精通正则表达式~~~

    第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于有部分经验的读者... 6 检索文本文件:Egrep. 6 ...

    [精通正则表达式(第三版)]

    第 1 章 正则表达式入门 29 解决实际问题 30 作为编程语言的正则表达式 32 以文件名做类比 32 以语言做类比 33 正则表达式的思维框架 34 对于有部分经验的读者 34 Egrep元字符 36 行的起始和结束 36 字符组...

    18.C#字符串和正则表达式参考手册 影印版

    第6章 正则表达式的高级概念 152 6.1 分组、替换和反向引用 152 6.1.1 简单的分组 153 6.1.2 Group类和GroupCollection类 156 6.1.3 替换 161 6.1.4 反向引用 162 6.1.5 高级组 163 6.2 在正则表达式中作决策 168 ...

    编译原理(翻译版)

    2.2.3 程序设计语言记号的正则表达式 29 2.3 有穷自动机 32 2.3.1 确定性有穷自动机的定义 32 2.3.2 先行、回溯和非确定性自动机 36 2.3.3 用代码实现有穷自动机 41 2.4 从正则表达式到DFA 45 2.4.1 从正则...

    编译原理及实践 Kenneth C.Louden 冯博琴

    14 1.7.1 TINY语言 15 1.7.2 TINY编译器 15 1.7.3 TM机 17 1.8 C-Minus:编译器项目的一种语言 18 练习 19 注意与参考 20 第2章 词法分析 21 2.1 扫描处理 21 2.2 正则表达式 23 2.2.1 正则表达式的定义 23 2.2.2 ...

    PHP程序设计第2版

    第4章 函数 第5章 数组 ...第7章 高级OOP特性 第8章 错误和异常处理 第9章 字符串和正则表达式 ...第32章 MySQL触发器 第33章 视图 第34章 实用数据库查询 第35章 索引和搜索 第36章 事务 第37章 导入和导出数据

    Linux命令学习 shell pdf格式

    第七章 正则表达式介绍 第八章 grep家族 第九章 AWK介绍 第十章 sed用法介绍 第十一章 合并与分割 第十二章 tr用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和shell变量 第十五章 引号 第四部分 基础...

    Python基础理论核心笔记汇总

    Python 核心笔记 By 阿 King ...【关于《Python 核心编程》(第...第十五章 正则表达式 34 第十六章 网络编程 37 第十七章 网络客户端编程 39 第十八章 多线程编程 40 第十九章 图形用户界面编程 42 第二十章

    即用即查PHP函数参考手册.part1.rar

    第八章 正则表达式函数 第四篇 文件目录操作篇 第九章 Directories函数 第十章 FilePro函数 第十一章 FileSystem函数 第十二章 Stream函数 第五篇 网络通信篇 第十三章 Socket函数 第十四章 SNMP函数 第十五章 ...

    即用即查PHP函数参考手册.part3.rar

    第八章 正则表达式函数 第四篇 文件目录操作篇 第九章 Directories函数 第十章 FilePro函数 第十一章 FileSystem函数 第十二章 Stream函数 第五篇 网络通信篇 第十三章 Socket函数 第十四章 SNMP函数 第十五章 ...

    即用即查PHP函数参考手册.part2.rar

    第八章 正则表达式函数 第四篇 文件目录操作篇 第九章 Directories函数 第十章 FilePro函数 第十一章 FileSystem函数 第十二章 Stream函数 第五篇 网络通信篇 第十三章 Socket函数 第十四章 SNMP函数 第十五章 ...

    \即用即查PHP函数参考手册.part4.rar

    第八章 正则表达式函数 第四篇 文件目录操作篇 第九章 Directories函数 第十章 FilePro函数 第十一章 FileSystem函数 第十二章 Stream函数 第五篇 网络通信篇 第十三章 Socket函数 第十四章 SNMP函数 第十五章 ...

    精品课件 Python从入门到精通 第2章 Python语言基础(共32页).ppt

    Python从入门到精通 第8章 Python中使用正则表达式.ppt Python从入门到精通 第9章 函数.ppt Python从入门到精通 第10章 面向对象程序设计.ppt Python从入门到精通 第11章 模块.ppt Python从入门到精通 第12章 异常...

    JavaScript语言精粹

    第7章 正则表达式 65 一个例子 66 结构 70 元素 72 第8章 方法 78 第9章 代码风格 94 第10章 优美的特性 98 附录a:糟粕 101 附录b:鸡肋 109 附录c:jslint 115 附录d:语法图 125 附录e:json 136 ...

    MFC应用程序在.NET框架下的扩展(2-1)

    综合运用MFC与托管扩展 1 1.1 引言 1 1.2 编写托管扩展应用程序 2 1.3 编写访问.NET的MFC应用程序 8 1.4 混合模式编程问题 11 1.5 运用.NET类型 15 1.6 小结 30 第2章 正则表达式 32 2.1 ...

    oracle database 10g 完整参考手册part1

    第32章 使用本地动态SQL和DBMS_SQL 第Ⅴ部分 对象关系数据库 第33章 实现类型、对象视图和方法 第34章 收集器(嵌套表和可变数组) 第35章 使用大对象 第36章 面向对象的高级概念 第Ⅶ部分 Oracle中的Java 第37章 Java...

    PHP程序设计(第2版) 英文

    第1章 PHP概述 第2章 安装配置Apache和...PHP的mysqli扩展 第31章 存储例程 第32章 MySQL触发器 第33章 视图 第34章 实用数据库查询 第35章 索引和搜索 第36章 事务 第37章 导入和导出数据

    oracle database 11g 完整参考手册中文高清完整版part3

     第32章 pl/sql 简介  第33章 应用程序在线升级  第34章 触发器  第35章 过程、函数与程序包  第36章 使用本地动态sql 和dbms_sql  第37章 pl/sql 调整 第ⅴ部分 对象关系数据库  第38章 实现对象类型、对象...

    oracle database 11g 高清完整中文版part2

     第32章 pl/sql 简介  第33章 应用程序在线升级  第34章 触发器  第35章 过程、函数与程序包  第36章 使用本地动态sql 和dbms_sql  第37章 pl/sql 调整 第ⅴ部分 对象关系数据库  第38章 实现对象类型、对象...

Global site tag (gtag.js) - Google Analytics