正则表达式学习小记

          这几天一直在努力的学习很多东西,因为是自学,走了很多弯路。特别是看到一些比较难得知识点时,心理总是很焦急,而且能够影响学习效率的东西太多了。一个安静的环境,自由的环境,舒缓的心情感觉真的很重要。就像今天下午的我,心理感觉总是乱糟糟的,一会想做这个一会想做那个,结果一个下午什么也没干成。蛋疼啊!

          大四了,找工作的鸭梨是真真切切的来了。突然感觉公司要求的技术自己一点都不懂,然后就华丽丽的急了。面试了两次,我就放下了。感觉这样的自己很难找到好的工作,还是赶紧静下心来学习吧!毕竟只要知道学习就不会太晚,给自己制定了一个方向:网站。因为专业已经学习了java,就找相关的资料啊 视频的学习起来:html-->css-->javascript-->jsp-->php-->jsp。大概就是这么一个路线吧!虽然这几天好多人都在我跟前说:这个技术前景不怎么好,让我学习ios啊什么的移动开发。可是我感觉既然自己有java的基础就要好好利用,毕竟技术在于:精。好吧,不扯了!进入主题!

          今天学习的是正则表达,因为在以前的学习和这段时间的javascript等学习发现正则表达式正的很重要、很方便、很实用。就想着好好学习学习,了解一番。找了个正则表达式30分钟入门教程就看了起来,现在看的基本有个眉目了。打算再看一遍,把该注意的地方和自己的测验写出来,做个记录。

          正则表达式

             主要思想:一种描述字符串结构模式的形式化语言
             1.结构模式:有结构的字符串,而不是字符流
             2.形式化:用形式化的表达方法应付变化的情况
           字符组简记:
                 [\d]                 [0-9]         匹配0-9之间的数字字符
                 [\D]      [^0-9]       匹配除0-9数字字符之外的字符
      [\w]      [0-9a-zA-Z]   匹配0-9和a-z和A-Z之间的字符
      [\W]      [^0-9a-zA-Z]  匹配除0-9、a-z、A-Z之外的字符
      [\s]               匹配空白字符(回车 制表 换行 空格)
      [\S]               匹配非空白字符
                 [^x]              匹配除了x以外的任意字符
      [^aeiou]            匹配除了aeiou这几个字母以外的任意字符
     
           常用的限定符
         
表1.常用的元字符
代码说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

                        在上表中的\b、^、$   元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$  

        ^  字符用来匹配 整个字符串 的开头
        $   字符用来匹配 整个字符串 的末尾
        \A  用来匹配整个字符串的开头
        \Z  用来匹配整个字符串的末尾

               这里需要说明的是:在大多数时候  上面的^和\A、$和\Z是可以互换使用的,但是要注意的是它们必须对应出现,即^和$、\A和\Z

转义字符:

     如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因    此,你应该使用\.\*。当然,要查找\本身,你也得用\\.

          例如:deerchao\.net匹配deerchao.netC:\\Windows匹配C:\Windows

特殊字符简记法:点号
        .  它可以匹配几乎所有字符   (除了换行符 \n)
        点号本身用  \.  匹配
        字符内部  [.]也只能匹配点号
 
量词:限定之前出现的次数
               *  表示之前出现的字符可以出现0次到无穷多次
               ? 表示之前出现的字符 至多只能出现一次
                + 表示之前出现的字符 至少要出现一次
 
区间量词:规定字符出现次数
  {min,max}   设定上限max   设定下限min
  {min,}          设定下限min
  {number}    设定一个具体的出现次数(连续重复匹配number次)
  *  = {0,}
  + ={1,}
  ? ={0,1}
量词的局限性:只能规定之前字符或字符组出现的次数
            规定字符串出现的次数就必须使用(....) 然后加上量词
                 (as)+     匹配asasas
多选结构:表示某个位置可能出现的字符串
                形式:(...|...)    (...|...|...)   
        
括号的作用:捕获分组
将括号中的字表达式捕获的字符串存到匹配结果中,供匹配完成后访问
形式:(...)
注意事项:
1.使用括号 就存在捕获分组
2.捕获分组按照开括号从左至右的顺序进行编号,潜逃也是一样
3.如果捕获分组后面存在量词,则匹配结果中,则捕获分组保存的是字表达式最后一次匹配的字符串
 
不捕获分组
形式:(? : ...)
 
反相引用:\1
 
锚点:规定匹配的位置
形式:
 边界条件         单词分界符锚点:\b    (只对英文字符 数字字符有用  不支持中文字符) 
单词分界符的一侧是单词字符 (\b)另一侧是非单词字符
 
^  字符用来匹配 整个字符串 的开头
$   字符用来匹配 整个字符串 的末尾
\A  用来匹配整个字符串的开头
\Z  用来匹配整个字符串的末尾
 
 字符类:

要想查找数字,字母或数字,空白是很简单的,因为已经有了对应这些字符集合的元字符,但是如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办?

很简单,你只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母[.?!]匹配标点符号(.或?或!)

   ***    这里我们要重点理解一下[.?!]这个例子:上面我们已经记录了 .  对!就是这个点号,我们说当点号在字符串中[.]和转义\.时只能匹配点号本身,

             所以这里的[.?!]匹配的就是(.或?或!)

 

现在我们来看看一个例子:\(?0\d{2}[) -]?\d{8}

          首先是一个转义字符\来转义(  后面的?表示出现的次数0或1次,然后是匹配数字0,然后匹配一个数字(\d)重复两次{2},然后就是一个字符类[) -]后面的?同样表示[]中的三个字符出现0或1次,让后就是数字字符重复出现8次  像(010)88886666,或022-22334455,或02912345678

 

环视
由于锚点对位置的判断不够灵活,所以引进环视
应用子表达式对位置进行判断
形式:
         (?=...) 
         (?!...)
         (?<=...)   
         (?<!...)

     

匹配模式:用来改变某些结构的匹配模式
              形式:
                        I:   不区分大小写(不对英文单词区分大小写)
                       S:    点号通配(在此模式下 .  号也能匹配换行符)
                        M:   多行模式(更改^和$符的)
                        X:     注释模式

      

posted @ 2013-10-17 21:09  虢国技酱  阅读(1215)  评论(16编辑  收藏  举报