正则表达式9

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一直以来想总结一下关于正则表达式的一些东西,但是一直都是有这样那样的事情,没有时间,最近忙着看delphi,和ace2所以总结一下,方便大家,也方便我自己。以下的大部份的内容都是google来的包含了一些业界大大们的文章内容,呵呵,先拜一拜诸位高人。本文版本:0.4慢慢修改增加中。-----------------------------------------------------------------1.正则表达式的概述:------------------------------------------------------------------------------------------------1.1诞生-------------------------------正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。WarrenMcCulloch和WalterPitts这两位神经生理学家研究出一种数学方式来描述这些神经网络。1956年,一位叫StephenKleene的数学家在McCulloch和Pitts早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。随后,发现可以将这一工作应用于使用KenThompson的计算搜索算法的一些早期研究,KenThompson是Unix的主要发明人。正则表达式的第一个实用应用程序就是Unix中的qed编辑器。具有完整语法的正则表达式使用在字符的格式匹配方面上,后来被应用到熔融信息技术领域。自从那时起,正则表达式经过几个时期的发展,现在的标准已经被ISO(国际标准组织)批准和被OpenGroup组织认定。许多程序中都使用了正则表达式,包括xsh,egrep,sed,vi以及在UNIX平台下的程序。它们可以被很多语言采纳,如HTML和XML,这些采纳通常只是整个标准的一个子集。-------------------------------1.2语言?NO!-------------------------------正则表达式并非一门专用语言,但它可用于在一个文件或字符里查找和替代文本的一种标准。它具有两种标准:基本的正则表达式(BRE),扩展的正则表达式(ERE)。ERE包括BRE功能和另外其它的概念。正则表达式(REs)通常被错误地认为是只有少数人理解的一种神秘语言。在表面上它们确实看起来杂乱无章,如果你不知道它的语法,那么它的代码在你眼里只是一堆文字垃圾而已。实际上,正则表达式是非常简单并且可以被理解。简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sedshell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。-------------------------------1.3我拿他来做啥用?-------------------------------正则表达式的应用比你想象的还要普通,随着正则表达式移植到交叉平台的程序语言的发展,这的功能也日益完整,使用也逐渐广泛。网络上的搜索引擎使用它,e-mail程序也使用它,即使你不是一个程序员,你也可以使用规则语言来简化你的程序而缩短你的开发时间。当然你可能只是一个一般的电脑使用者,但是当你需要从浩如烟海的文档里面搜索到你需要的东西时你会怎么做?使用通配符“*”?“?”?你会发现很难真正找到需要的,如何准确的得到所需要的,呵呵,你的学正则了。-----------------------------------------------------------------2.正则表达式的标准通用基本语法:------------------------------------------------------------------------------------------------2.1字符-------------------------------正则表达式的关键之处在于确定你要搜索匹配的东西,如果没有这一概念,正则将毫无用处。每一个表达式都包含需要查找的指令。.匹配任何字符。.lulu匹配hlulufluluglulu等等。[]匹配任何在括号里面的字符。[jkl]匹配jkkkhhgggdkooploot等等,但是不匹配jffftiiippl等等。[a-z]匹配所有的小写的字母。[^]匹配任何一个不再括号里面的字符。[^lu]匹配hhjsdggyyk等等。[^0-9]匹配任何单词,但是不匹配数字。-------------------------------2.2重复-------------------------------重复操作符,或数量词,都描述了查找一个特定字符的次数。它们常被用于字符匹配语法以查找多行的字符。?匹配0次或1次(相当于{0,1})。?lulu匹配hluluplulu等等。*匹配0次或更多次的前面字符(相当于{0,})。lu.*jj匹配lusdijbfhsbfsdbbfsdjjlululululujj等等。+匹配一次或更多次的前面字符(相当于{1,})。[o]+lulu匹配oluluoooolulu但是不匹配lulu等。{n}严格匹配n次(相当于{n,n})。[a-z]{3}lulu匹配jklluluooolulupaolulu但是不匹配oluluooluluplulululu等。{n,}匹配n次或更多次。.{3,}lulu匹配1lllulu123lulu8iioooooluluooo888874kkklulu但是不匹配oolulu2lulup5luluplulu等。{n,m}匹配至少n次但要不多于m次。o[p]{2,4}lulu匹配oppluluopppluluopppplulu但是不匹配opluluoppppplulu等。默认状态下是贪婪模式,尽可能多的匹配,如果后面加上?就是非贪婪模式,尽可能少的匹配。比如?变成非贪婪模式就是??其他的用法一样。PS:说实在话,我真是看不出贪婪模式和非贪婪模式有啥区别,呵呵。-------------------------------2.3锚-------------------------------锚是指它所要匹配的格式,使用它能方便你查找通用字符的合并,比如在行的末尾或者开头等。^只从行首开始匹配。^lulu匹配行首的lulu,不再行首不匹配。$只从行尾开始匹配lulu$匹配行末的lulu,其他的不匹配。\只从单词首开始匹配。\lulu匹配luluoopluluggg不匹配opluluoo等。\只从单词尾开始匹配。lulu\匹配oopluluiiihlulu不匹配luluoopoluluikk等。\b匹配单词首或者单词尾。\blulu匹配lulukkppllulu45jkod等。lulu\b匹配kklolulu48iolulu等。\B匹配单词的中间。\Blulu匹配kkluluopjjluluoppiiolulu不匹配luluoop等。-------------------------------2.4间隔-------------------------------正则中的另一可便之处是间隔(或插入)符号。实际上,这一符号相当于一个OR语句。|表示OR。(o|p)lulu匹配oluluplulu。同样的意思可以写成[op]lulu。-------------------------------2.5保留字符-------------------------------正则的最后一个最重要特性是保留字符(也称特定字符)。例如,如果你想要查找“ne*rd”和“ni*rd”的字符,格式匹配语句“n[ei]*rd”与“neeeeerd”和“nieieierd”相符合,但并不是你要查找的字符。因为‘*’(星号)是个保留字符,你必须用一个反斜线符号来替代它,即:“n[ei]\*rd”。其它的保留字符包括:^.[$()|*+?{\您要是看不懂这里的基本语法,那您下面的就不要在看了,浪费时间,您应该先把上面的语法搞明白,不懂的可以问我,我会尽最大努力帮您,当然可能有的我也不会,呵呵我是菜鸟哈,可能有些地方写的不对发现了说一下,谢谢。-----------------------------------------------------------------3.正则表达式的标准通用高级语法:------------------------------------------------------------------------------------------------3.1几个重要的元字符-------------------------------\w匹配字母,数字或下划线字符。\W匹配所有与\w不匹配的字符。\s匹配单个空格符,包括tab键和换行符。\S匹配除单个空格符之外的所有字符。\d匹配从0到9的数字。\D匹配所有与\d不匹配的字符。\l匹配任何小写字母。\L匹配所有与\l不匹配的字符。\u匹配任何大写字母。\U匹配所有与\u不匹配的字符。\CAnysinglecharacter,equivalentto'.'.\QThebeginquoteoperator,everythingthatfollowsistreatedasaliteralcharacteruntila\Eendquoteoperatorisfound.\ETheendquoteoperator,terminatesasequencebegunwith\Q.-------------------------------3.2子表达式-------------------------------圆括号()也可以结合迭代符和引用符用于对字符分组。(lulu){4,5}会匹配lulu和4和5中的一个实例。(abc|[0-9])*会匹配abc和数字0到9之间的任何组合。例如abc5679abc以及abc77abc。-------------------------------3.3引用符-------------------------------每个在()里匹配的字符序列会被保存为子表达式,您可以通过使用\1-\9在后面指向它,而从\1到\9的参数会按数字值从左到右引用指向的子表达式。b(.)\1n会匹配been以及boon,但是不会匹配bean、ben、或者beeen。-------------------------------3.4修改符-------------------------------修改符允许从该点开始改变匹配的行为。如果修改符包含在子表达式里面,它仅影响该子表达式。如使用(?i)和(?-i)控制大小写匹配。(?i)LuluSoft对LuluSoft和lulusoft都匹配(?i)Lulu(?-i)Soft匹配LuluSoft以及lULUSoft,但是不匹配lulusoft-------------------------------3.5转义符号-------------------------------

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功