`
ec06cumt
  • 浏览: 19900 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

深入正则表达式(三)

    博客分类:
  • J2SE
阅读更多
现在来谈谈正则表达式的一些细节的问题。

       一.先来谈谈匹配模式

            1.不区分大小写的匹配模式

            2.宽松的排列和注释模式

            3.点号通配模式也叫单行模式

            4.增强的行锚点模式也叫多行模式

            5.文本模式



            1.不区分大小写,在各个语言中的表示方法都不一样,但是原理是一样的。如常用 (?i)表示不区分大小写的开头,用(?-i)表示不区分大小写的结尾。如 (?i)very(?-i)good 来匹配 verygood 是能成功的,来匹配VErygood也是能常用的。这一点很简单,相信大家都能明白。我要说的一点是,当只有(?i),没有有(?-i)符号是,表达式匹配一样字符的结尾,也就是哪一样都不区分大小写。常能改变一些元字符的匹配规则。对于不同的语言,可能一些封装不一样。如java.util.regex中,用Pattern.CASE_INSENSITIVE,来表示不区分大小写格式。



            2.宽松的排列和注释模式,常用(?x),宽松的注释模式。在此不作详细介绍。

           

            3.点号通配模式也叫单行模式,指的是.号的匹配方式,它在通常情况下只能匹配换行符之前的位置。不能进行多行的匹配。若使用单行模式,能匹配多行的情况。包括换行符。(?s)常用的匹配字符。

            

            4.  增强的行锚点模式也叫多行模式(?m)。

                 锚点^匹配需要搜索的文本起始位置, 如果使用增强的行锚点匹配模式,它还能匹配每个换行符之后的位置。在某些系统中,增强谋士下,^还能匹配Unicode的终结符。

                 \A 总是能够匹配待搜索文本的起始位置。

                 \Z 通常是字符串的末尾位置,或者在字符串末尾的换行符之前的位置。

                 \z 总是匹配字符串末尾 

           5.文本模式  \Q……\E,把其中的字符全部当做文本来处理。注意java.util.regex中只在1.6(含)之后的版本起作用。    

     模式对于正则表达式的匹配有很到的影响。常常会改变正则表达式员字符的匹配规则。



  二、写正则表达式的设计原则:

                1. 只匹配期望的文本,排除不期望的文本。

                2. 必须易于控制和理解

                3. 如果使用NFA引擎,必须保证效率。

       三、常见的几个正则表达式。

                1. 匹配多行文本 ^\w+=([^\n\\] | \\.)*       其中的 \\.能匹配反斜线加换行符的结合体

                 2 匹配IP地址的每一段的数字:[01]?\d\d? | 2[0-4]\d | 25[0-5] 完整的匹配字符:

                                   (?<![\w.])([01]?\d\d? | 2[0-4]\d | 25[0-5] )\.([01]?\d\d? | 2[0-4]\d | 25[0-5] )\.([01]?\d\d? | 2[0-4]\d | 25[0-5] )\.([01]?\d\d? | 2[0-4]\d | 25[0-5] )(?![\w.])                

                 3. 匹配对称的括号:\([^()]*\)从一个开括号到最近的闭括号,但是不容许其中包含开括号

                 4. 匹配一个数:^-?([0-9]+(\.[0-9]*)? | \.[0-9]+)$

                 5. 去除文本首尾的空白字符perl语言实现:s/^\s*((?:.*\S)?)\s*$ /$1 /s 简单解释一下perl中s/ a/b /s是替换结构,把a替换成b结尾的s是不区分大小写,也就是前面提到的不区分大小写模式。

                还有其中的$1是指的是((?:.*\S)?),它是正则表达式中的分组问题。它按括号进行分组,每当正则表达式中的出现一组括号,正则引擎就进行记录一组值,把括号中的值给隐性记住。这样就可以以便以后访问。

               $1就是指的分组号为1的那一组内容,或许你要问,表达式中不是出现两组括号吗?那你要去前面看看?:的意思,?:它是告诉正则引擎不用记住这组括号的分组号和分组值。也就是告诉正则引擎那组括号不起作用。

               其实从这一分组中,我们也能看到一些正则表达式的优化内容,那就是不要滥用括号,不要让引擎记住太多的内容。还有一点就是可以用?:让正则引擎不记住括号的内容。这两点也是常用的优化正则表达式的手段。
0
0
分享到:
评论

相关推荐

    深入浅出正则表达式,正则表达式详细介绍

    正则表达式由浅入深逐级深入正则表达式由浅入深逐级深入正则表达式由浅入深逐级深入正则表达式由浅入深逐级深入

    ASP.NET 中的正则表达式

    本文介绍了深入学习正则表达式的基础知识和推荐内容。 本文主要面向对正则表达式知之甚少或没有使用经验,但却熟悉 ASP.NET、可借助 .NET 编程的初学者。此外,希望本文连同 regular expression cheat sheet 成为有...

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

    十年三版,再显王者风范,近30年开发经验的智慧结晶,深入理解正则表达式,彻底修炼基本功,全球第一本全面深入讲解正则表达式的经典巨著,《程序员》杂志技术主编孟岩鼎力推荐。 专家点评:《精通正则表达式》是...

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

    十年三版,再显王者风范,近30年开发经验的智慧结晶,深入理解正则表达式,彻底修炼基本功,全球第一本全面深入讲解正则表达式的经典巨著,《程序员》杂志技术主编孟岩鼎力推荐。 专家点评:《精通正则表达式》是...

    精通正则表达式 中英文

     《精通正则表达式(第3版)》,以明晰轻松的笔调向程序员深入浅出地讲解复杂的知识,并给出了现实世界中复杂问题的解决办法,读者能够立刻运用书中丰富的知识,巧妙而高效地解决各种问题。 此书为英文版,因为中文...

    JAVA 正则表达式 教程

    Java 中从 JDK 1.4 开始增加了对正则表达式的支持,至此正则表达式成为了 Java 中的基本类库,使用时不需要再导入第三方的类库了。Java 正则表达式的语法来源于象征着正则表达式标准的 Perl 语言,但也不是完全相同...

    C#_Regex_深入正则表达式.doc

    C#_Regex_深入正则表达式.doc

    正则表达式深入浅出.pdf

    正则表达式是⼀组由字⺟和符号组成的特殊⽂本,它可以⽤来从⽂本中找出满⾜你想要的格式的句 ⼦。 ⼀个正则表达式是⼀种从左到右匹配主体字符串的模式。 “Regular expression”这个词⽐较拗⼝,我们常使⽤缩写的...

    深入浅出之正则表达式

    本文是Jan Goyvaerts为RegexBuddy写的教程的译文。 教程写的非常好,可以说是我目前见过最好...本文通过描述正则表达式引擎的内部工作机制 让你详细了解正则表达式如何进行文本匹配,以及如何写出更高效的正则表达式。

    正则表达式完整高清版

    第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍的各种知识落实到6种常用语言.net、java、javascript、php、python、ruby中,不但详细介绍了语言中正则...

    python正则表达式_深入浅出

    python正则表达式_深入浅出

    正则表达式 深入理解

    正则表达式,介绍正则表达式的好东西,看了就会正则表达式

    深入浅出正则表达式(非常精辟)

    深入浅出正则表达式深入浅出正则表达式深入浅出正则表达式

    [精通正则表达式(第3版)]中文版.(美)Jeffrey.E.F.Friedl-part1.rar

    本书自第1版开始着力于教会读者“以正则表达式来思考”,来让读者真正“精通”正则表达式。该版对PHP的相关内容、Java1.5和Java1.6的新特性作了可观的扩充讲解。任何有机会使用正则表达式的读者都会从中获益匪浅。...

    C++深入浅出之正则表达式

    正则表达式的介绍有很多,各种语言之间可能有些差异,这个是专门介绍C++正则表达式编程

    精通正则表达式(第3版) 英文版

    《精通正则表达式(第3版)》,以明晰轻松的笔调向程序员深入浅出地讲解复杂的知识,并给出了现实世界中复杂问题的解决办法,读者能够立刻运用书中丰富的知识,巧妙而高效地解决各种问题。 “如果你的工作需要用到...

    php正则表达式深入浅出.pdf

    php正则表达式深入浅出.pdf php正则表达式深入浅出.pdf

    深入浅出之正则表达式(一)

    深入浅出之正则表达式(一)搜 “深入浅出之正则表达式(二)”会找到第二部分

    正则表达式30分钟入门

    学习正则表达式快速入门的法宝。 语言深入浅出,举例实用、典型。 1、本文目标 2、如何使用本教程 3、正则表达式到底是什么东西? 4、入门 5、测试正则表达式 6、元字符 7、字符转义 8、重复 9、字符类 10、分枝条件...

Global site tag (gtag.js) - Google Analytics