分享到:

理解正则表达式(下)

本文的第一部分发表后,得到很多读者的支持和鼓励,这充分表明,正则表达式作为最有力的文本处理工具,已经越来越多地得到开发者的重视。本期继续分享我们在学习和应用正则表达式过程中总结出来的一些心得。行两个阶段。例如,在perl/Ruby中,通常将正则表达式的编译和匹配两个步骤合二为一:,户.口,付-︸﹃︸︸︸,﹃︸﹄︸一︸一-︸一一一︸︸︸︸︸︸一一︸l $lin旧~耐八[今名」fZ)[\d]f4,6手: \S*艰·+》辛潇犷而在Python、Java、.NET中,却有一个显式的编译过程: .认内城川t.1一川湘明川内月川料肚书料训J汀川叼往盯扔训幻| 6.理解正则表达式的力里根源即使使用正则表达式很多年的人,也经常会对正则表达式的强大威力赞叹不已。正则表达式相对简单,却极其有力地解决了日常文本处理中大部分的问题。这样的事情,在整个计算机领域里,实际上并不多见。试想如果能够在网络编程或者软件体系结构设计领域存在像regex这样的工具,...  (本文共3页) 阅读全文>>

《程序员》2007年08期
程序员

一夫当关——《精通正则表达式》书评

~一一—一一一-一—一—一——一一一一一一止呈二二二二兰二二I T产业新技术日新月异,令人目不暇给,然而在这其中,真正称得上伟大东西的却寥寥无几。,998年,被誉为“软件世界的爱迪生”,发明了BSD、TCP/IP、esh、vi和NFS的SUN首席科学家Bill Joy曾经不无调侃地说,在计算机体系结构领域里,缓存是唯一称得上伟大的思想,其他的一切发明和技术不过是在不同场景下应用这一思想而已。在计算机软件领域里,情形也大体相似。如果罗列这个领域中的伟大发明,我相信绝不会超过二十项。在这个名单当中,当然应该包括分组交换网络、web、LisP、哈希算法、UNIX、编译技术、关系模型、面向对象、XML这些大名鼎鼎的家伙,而正则表达式也绝对不应该被漏掉。正贝lJ表达式具有伟大技术发明的一切特点,它简单、优美、功能强大、妙用无穷。对于很多实际工作来讲,正则表达式简直是灵丹妙药,能够成百倍地提高开发效率和程序质量。csDN的创始人蒋涛先生在早...  (本文共2页) 阅读全文>>

《知识文库》2016年14期
知识文库

用JS与正则表达式验证表单数据格式的方法

根据表单数据项的实际内容不同一般都有一个标准的数据格式要求,当表单数据准备提交到服务器之前我们应该在客户端先进行校验,格式合格再交到服务器进行进一步处理,如果格式不合格就先弹出错误提示并不提交,这样不仅能提高网页与用户的交互效率还能减轻服务器处理的负担。一般来讲这个客户端进行的格式校验可以使用JS结合正则表达式来完成。一、什么是正则表达式正则表达式英文全称是Regular Expression,简称regexp。是一种描述字符串结构的语法规则,是一个特定的格式化模式,它可以匹配、替换、截取匹配的字符串。二、正则表达式的语法规则1.正则表达式变量的定义JS风格:var re=new Reg Exp(‘a’);Perl风格:var re=/a/以上对比可见perl风格代码简单方便,所以我们一般使用perl风格。2.正则表达式的首尾定位符^:匹配字符串的开始位置。$:匹配字符串的结束位置。如^ab,代表匹配以ab开头的字符串,x$,代...  (本文共2页) 阅读全文>>

《电脑与信息技术》2011年05期
电脑与信息技术

正则表达式方程组的最小解

正则语言是形式语言与自动机理论中的一种核心语言,正则表达式表示的集合恰为正则语言。正则表达式不但具有良好的代数性质,还具有强大的表达能力,能够描述广泛的内容特征。因此,正则表达式匹配成为深度包检测的主要手段,匹配算法则是其关键技术。2006年以来,正则表达式匹配算法研究已成为深度包检测领域的一个研究热点。目前,正则表达式匹配算法研究主要集中在如何压缩DFA空间[1],现有算法按照压缩方式可以大体分为三类:转换压缩[2]、状态压缩[3,4]和字母表压缩[5]。笔者在相关研究中,提出了规则压缩的构想:第一,将正则表达式分组;第二,对每一组正则表达式列出一个正则表达式方程,从而得到正则表达式方程组;第三,求解该方程组的最小解;第四,针对最小解构造DFA并设计相应的匹配算法。与规则压缩有关的基础理论问题有:(1)正则表达式方程组的最小解的存在性;(2)最小解的构造;(3)基于Gauss消元法的求解算法的正确性;(4)求解算法的时间复杂度...  (本文共4页) 阅读全文>>

《程序员》2008年03期
程序员

正则表达式随笔

作者现在是CSON汀CAST讲师,在本文中介绍了他使用正则表达式的经验。环视结构(look一around)分析日志(或普通数据文件),恐怕是大家在日常工作中经常遇到的问题,正则表达式应当是理所当然的选择,简单的正则表达式应用,大家应该都会,即使暂时不熟悉,查查资料也能解决。但是,有时候情况复杂,看起来正则表达式往往“束手无策”,其实事实并非如此。在这篇文章中,我们通过一个具体的例子,来讲解正则表达式的高级技巧。事情源于朋友的一封来信:“最近我遇到个小问题:公司让我处理日志文件,说实话我还真是巧,本来没有打算学正则,要是没有正则可能我这次还不知道怎么处理。简单说一下,主要任务是逐行读取数据,对每行内容进行分析,第一行是字段名,其余是日志内容,行与行之间没有联系,每行中字段内容用逗号隔开(但前两个字段和最后两个字段没有引号包围),逗号中的数据内容是用引号包围起来的,因为在生成日志的时候,没有考虑到在引号中的数据会存在逗号,所以无法整...  (本文共4页) 阅读全文>>

《中文信息》2003年11期
中文信息

正则表达式的五个良好习惯

对于大部分程序员来说,在一个正则表达式环境里使用空格和缩进扫咧都不成问题,如果他们没有这么做一定会被同行甚至外行人士看笑话。几乎每个人都知道把代码挤在一行会难以阅读、书写和维护。对于正则表达式又有什么不同呢? 大部分替换表达式工具都具有扩展的空格特性,这允许程序员把他们的正则表达式扩展为多行,并在每一行结尾加上注释。为什么只有少部分程序员利用这个特性呢?Perl6的正则表达式默认就是扩展空格的模式。不要再让语言替你默认扩展空格了,自己主动利用吧。 记住扩展空格的窍门之一就是让正则表达式引擎忽略扩展空格。这样如果你需要匹配空格,你就不得不明确说明. 在Perl语言里面,在正则表达式的结尾加上x,这样“耐foo lbar/”变为如下形式:在PHP语言里面,在正则表达式的结尾加上x,这样“’/fo。}bar/‘”变为如下形式:在Python语言里面,传递模式修饰参数“re.VERBOSE”得到编译函数如下:处理更加复杂的正则表达式时,...  (本文共4页) 阅读全文>>