作者:empty 页数:100 出版社:empty |
正则表达式袖珍手册正则表达式是一种专门用来解析和操织文木的语言,正则表达式通常被用来处理复杂的如今,正则表达式已经被包括在绝大数的编程语言,以及很多脚本语言、编辑器、应用、数据库和命令行工具中,本书的目的是提供个快速接触绝大多数流行语言正则表达式语法和模式匹配操作的机会,这样你就可以把正则表达式的知识应用到任何环境中。搜索和替换操作,以及验证文本数据的格式。本书的第二版增加了有关Ruby、Apache webserver和通用正则表达式部分, 同时更新了已有语言的相关章节。
关于本书本书从正则表达式的一般介绍开始。第一部分描述和定义正则表达式中用到的结构,并建立了模式匹配的通用原则。剩下的部分主要介绍不同语言实现的正则表达式的语法、特性和使用。
致谢Jeffrey E.F.Friedl著的《精通正则表达式》(Mastering Regular Expressions(O'Reilly) ) 是正则表达式的权威之作。在编写木书的时候,我基木上依赖于本书和作者的建议。为了方便对正则表达式语法和概念的进一步讨论, 本书提供了《精通正则表达式》第三版(MRE)的页码引用。Nat Torkington和Linda Mui是两位非常优秀的编辑, 他们基于第一版中出现的束手问题给了我很多指导。木版的编辑受益于And yOram的优秀编辑技术。特别感谢Sarah Burcham把撰写本书的机会给予了我, 以及她对“Shell工具”一章做出的贡献。感谢来自Philip Hazel,Steve Friedl, O laB in i, Ian Darwin, Zak Greant, Ron Hitchens, A.M.Kuchling, Tim All wine.Schuyler Erle, David Lents, Rabble, Rich Bow an, Eric Eisenhart, and Brad Merrill的书写和技术评审.
正则表达式和模式匹配简介字符类和类似(class-like) 的结构一个正则表达式(regularexpression) 就是包含正常字符串和特殊元字符(metacharacters)模式匹配包括搜索由正则表达式匹配的文木一部分.搜索这个文木的核心代码叫正则表正则表达式应用到输入的时候是从第一个字符,并一次处理到最后一个字符,一旦正则表达式引擎找到一个匹配, 就立即返回(请参看MRE 148-149) ,计量器指定一个对象(字符、字符串)的最大可重复次数。标准的计量器方百计想匹配所有可能的次数。如果对于匹配成功有必要那么可以将其值设置为比最大值小的数.遗漏字符和试图少贪婪匹配的处理过程叫回溯(backtracking, 请参看MRE151-153)。不同类型的正则表达式有各自不相同的特点.通常由两种类型的引擎:确定有限自动机传统的NFA引擎用正则表达式的每个元素跟输入字符串进行比较, 并记录正则表达OP SIX NFA引擎的原理和传统的NFA相似, 主要的一个差别是:POSIX引擎总是选择最这里所讲的元字符和元序列表示正则表达式结构和通用语法的可用类型。然而,不同实很多实现提供了难输入字符的快捷表达字符。《请参看MRE 115-118)很多正则表达式实现为alert(告警) , backspace(空白) , escape character(换码符) , form用十六进制数表示字符。四位数字和更人的数可以表示Unicode字符范围。比如,由于A SCI控制字符用小于32的数值编码, 为了安全, 通常用个大写的char—有些字符类用来指定白己的集合,一个字符类匹配输入字符串的中字符集定义中的单一字字符类,[.J,和求反字符类[小允许你列出你想或不想匹配的字符。一个字符类通成元序列(meta sequences) 的字符串, 正常字符串匹配它们自己。元字符和元序列是字符或表示数量、位置或字符类型的字符序列。“正则表达式元字符、模式和结构”列表,展示了正则表达式中最通用的元字符和元序列,后面的章节中将列出正则表达式的特殊实现所支持的有效的元字符和它的语法。达式引擎(regular expressionengine) .只要记住以下两个规则, 你就可以推山绝大多数的正则表达式的结果:1.最早匹配成功(最左边的)2.标准计量器是贪婪的(Dete ministic Finite Automaton, DFA) 和非确定有限自动机(Nondeterministic FiniteAutomaton, NFA) .DFA速度快, 但是缺了NFA的许多特性, 比如, 获、环顾四周、非贪婪计量器, NFA有传统实现和POSIX两类,DFA引擎DFAs用输入字符串的每一个字符依次和正则表达式比较, 并记录这个过程中所有的匹配。出于每字符最多只检测次, 所以DFA引擎的速度最快, DFAs的个传统的记忆方法是它的交换是贪婪。当在一次匹配中有不止一个可选(fool foobar) 时, 选择最长的一个,所以规则1可以记作“最长最左匹配成功.”(请参看MRE 155-156)
传统的NFA引擎式中所选择的两个透项的位置。如果一个选择失败,引擎回溯到最近保存的位置。在标准计量器的作用下,引擎一般采用贪婪的选项来匹配更多的文本。然而,如果这个选项导致匹配的失败, 那么引擎会返回到一个保存的位置, 井尝试低贪婪度的路径。传统的NFA引擎采用顺序交换,这样交换中的每一个选项都依次进行尝试,如果前面已经找到了一个成功的匹配,那么很长的匹配可能会被忽略。所以,规则1可以称作去读“贪婪量器满足条件之后的最先最左匹配”。(请参看MRE 153-154)POSIX NFA引擎长最左匹配比如, 交换cat|e ategory, 即使第一个交换(“cat ) 已经匹配成功, 面且在前面出现过, 如果可能的话, 仍将匹配“e ategory”整个字。(请参看MRE 153-154)正则表达式元字符、模式和结构现之间的语法和可用性差异很大.字符速记feed(换页符) , newline(换行) , carriage return(回车) , h or zontal tab(水平制表符) 和verticaltab characters(垂直制表符) 指定了速记字符, 例如, n是换行符的速记, 通常是LF(012,八进制),但是有时可能是CR(015,八进制),依赖于操作系统。比较混乱的是,很多实现中同时用 b表示空格和字边界(“字”字符和非字字符之间的位置)。对于这些实现来说,在字符类(字符串匹配中可能的字符的集合)中表示空格,其余地方表示字边界,八进制转义: num用两个或三个八进制数字表示一个字符。比如 015V 0112匹配A SCI中的CR/LF字符序列。