• as3正则表达式


    1.新建正则表达式,有两种方式
    var exp1:RegExp = new RegExp("ABCD","g");
    var exp2 = /ABCD/g;//g global 表示全局匹配

    trace("ABCDEFABCD".match(exp1)); 
    trace("ABCDEFABCD".match(exp2));//输出ABCD,ABCD,其中,字条串.match(表达式),返回一个匹配到的数组

    2.元字符
     
    1)"." 表示匹配任意单个字符(如:1,e,中,*等),可以是数字,字母,汉字,标点等特殊字符
    如:
       trace("this is a good Boo*".match(/.oo./g));//返回good,Boo*
    但是如果匹配的正则子串本身要包含"."的话,就要用转义,如:
       trace("this is a good Boo.".match(/.oo./g));//返回Boo.

    2)"^" 表示匹配字符串的起始处
       (1) trace("ABAFT ABALYN ABOUT".replace(/^AB/g,'中国'));//把字符串起始处的"AB"替换为"中国"     返

    回: 
        中国AFT ABALYN ABOUT
       输入后变成:
        中国AFT
        ABALYN
        ABOUT

    在多行匹配中,匹配方式指定为m时,从每个 后开始匹配

       (2) trace("ABAFT ABALYN ABOUT".replace(/^AB/gm,'中国'));//m multiline表示多行的意思,即多行匹配 
       返回:
        中国AFT 中国ALYN 中国OUT
       输入后变成:
        中国AFT
        中国ALYN
        中国OUT


    注意:

       trace("ABAFT ABALYN ABOUT".replace(/^AB/,'中国'));

       trace("ABAFT ABALYN ABOUT".replace(/^AB/m,'中国'));

       以上两种方式匹配的结果都与(1)结果一样,所以要匹配多行时,"g"和"m"要同时使用

    3)$ 表示匹配字符串结尾处,在多行匹配字符串中,匹配方式指定为m时,从每个 前开始匹配

      

    4)* 表示其前面的字符或表达式出现0次或多次,即任意次,次数>=0,如果0次或多次都满足的情况,取出现多次
       如:/bo*/ 表示o可以出现0次或多次,bo,boo,boook,b,bk都匹配

    5)+ 表示其前面的字符或表达式至少出现1次以上,即次数>=1,如果1次或多次满足的情况,取出现多次
       如:/bo+/ 表示o可以出现1次以上,bo,boo,boook都匹配,但b,bk不匹配

    6)? 表示其前面的字符哎呀表达式可出现一次也可不出现,如果出现与可不出现两种都满足的情况,取出现一次
       如:trace("This Book is Good Boooooook BoxBx".replace(/Bo?/g,'一'));
       返回:This 一ok is Good 一ooooook 一x一x
      其中Book既满足Bo,又满足B,也就是说o可出现也可不出现,取第一种情况,Bo

      《关于最小匹配和最大匹配(贪婪模式和非贪婪模式)》

       ".*"

      匹配 "内容A" "内容B" "内容C"   结果只有一个匹配结果, 就是"内容A" "内容B" "内容C", 

      贪心模式尽可能的匹配到更长的内容,于是从第1个双引号开始直到最后一个双引号

      ".*?"

      匹配 "内容A" "内容B" "内容C"

      结果有3个匹配结果, 分别是"内容A" 和 "内容B" 和 "内容C" . 非贪心模式尽可能少的匹配

    7)() 表示把正则表达式的特定串组成一个组,作为一个整体
       如:trace("AGoGo Is A Name AGo's Father".replace(/A(Go)*/g,'哈'));
                  把Go作为一个整体,即Go可出现任意次
       返回:哈 Is 哈 Name 哈's Father

       注意:组可以认为是正则表达式匹配模式的子模式,可以当做是一个普通的字符进行处理


        (1)String.match()和RegExp.exec()捕捉了整个正则匹配的子串,同时捕捉了组匹配的子串
        如:

         trace("this is a good boboobooobooook".replace(/(bo+)*/,'book'));
          bo+表示以b开头,o出现1次以上,然后再以组的形式出现任意多次
         返回:this is a good book
         /(bo+)*/ 这里相当于/(bo+)(bo+)(bo+)(bo+)/
       
        (2)组的反向引用,即把前面定义的组引用过来,如/(bo+).*1kie/
         trace("this book is a goodbookie".replace(/(bo+).*1kie/,'book')); 
         返回:this book
         /(bo+).*1kie/ 这里相当于/(bo+).*(bo+)kie/
       
        (3)?:指定组所匹配的子串不被捕获
         trace("this book is a good bookie".match(/b(o+)k./));
         trace("this book is a good bookie".match(/b(?:o+)k./));
         返回:
          book ,oo
          book 

        (4)?=向前查找,即先匹配,再把符合某个特殊条件的取出来
         如:
         trace('flashmx flash8 flashcs3 flash4 flash5'.replace(/flash/g,'[FLAHSH]'));
         trace('flashmx flash8 flashcs3 flash4 flash5'.replace(/flash(?=cs)/g,'[FLAHSH]'));

         返回:
              [FLAHSH]mx [FLAHSH]8 [FLAHSH]cs3 [FLAHSH]4 [FLAHSH]5
              flashmx flash8 [FLAHSH]cs3 flash4 flash5

          /flash(?=cs)/g是在/flash/g的基础之上加了(?=cs),
          这样符合条件的有flashcs3 flashcs4 flashcs5三项,


         ?!向后查找,即先匹配,再把符合某个特殊条件的取出来
         如:
          trace('flashmx flash8 flashcs3 flashcs4 flashcs5'.replace(/flash/g,'[FLAHSH]'));
          trace('flashmx flash8 flashcs3 flashcs4 flashcs5'.replace(/flash(?!cs[3-5])/g,'[FLAHSH]'));
         返回:
          [FLAHSH]mx [FLAHSH]8 [FLAHSH]cs3 [FLAHSH]cs4 [FLAHSH]cs5
          [FLAHSH]mx [FLAHSH]8 flashcs3 [FLAHSH]cs4 [FLAHSH]cs5

        
          /flash(?!cs[3-5])/g是在/flash/g基础之上加了(?!cs[3-5]),
          即除了flashcs3,flashcs4,flashcs5以上的所有项
       

         ?=与?!相斥


    8)[] 表示一个范围,里面的字符满足一个即可
       如:/[bk]/ b,k都满足
          /[a-zA-Z0-9] 26个小写字母,26个大写字母,10个数字其中任一个都满足


       (1)
        trace("32o498dslkfjjlkjLDSJFL70".match(/[^0-9]/g));
        trace("32o498dslkfjjlkjLDSJFL7^0".match(/[^0-9]/g));
        trace("32o498dslkfjjlkjLDSJFL7^0".match(/[0-9^]/g));

        返回: o,d,s,l,k,f,j,j,l,k,j,L,D,S,J,F,L
         o,d,s,l,k,f,j,j,l,k,j,L,D,S,J,F,L,^
         3,2,4,9,8,7,^,0


        如果把^放在[]字符集的开始处,表示取反的意思,如[^0-9],表示非数字,相当于D
        如果把^放在[]字符集的开始处,且被匹配的字符串含有^字符时,即表示取反的意思,又把^作为一个普   

    通字符来看待,这样,非数字和^都满足,如上面的第二trace()   
      
       (2)在字符集中,"." 并不是一个元字符,而是当作一个普通字符看待,相当于用"."转义
        trace('sdfdsfdfl34l3re.'.match(/[0-9.]/g));
        trace('sdfdsfdfl34l3re.'.match(/[0-9.]/g));
       
        返回:
         3,4,3,.
         3,4,3,.
       

       (3)在字符集中,只有"-"和""是被认为是转义的,
          如:[0-9] 表示从0到9的任一数字
        [ ] 表示 换行和 制表位

        trace('ldslfasdasd ksdjlsd 324123424'.replace(/[ ]/g,'转义'));
        返回:ldslfasdasd转义ksdjlsd转义324123424


    9)| 表示任选一,与[]功能相似
       如:/b|k/ b,k都满足
          /gook|book/ gook,book都满足
         trace("this is a good cook book".replace(/good|book/g,'哈'));
         返回:this is a 哈 cook 哈

       注意:(1)
        trace("this is a good book".replace(/[gk]/g,'哈'));
        trace("this is a good book".replace(/g|k/g,'哈'));

        返回:this is a 哈ood boo哈
             this is a 哈ood boo哈   
        以上两个表达式效果是一样的
       

        但是:trace("this is a good cook book".replace(/good|book/g,'哈'));
           trace("this is a good cook book".replace(/[goodbook]/g,'哈'));
      
        返回:this is a 哈 cook 哈
           this is a 哈哈哈哈 c哈哈哈 哈哈哈哈
        以上两个表达式效果是不一样的,因为|把good和book作为一个整体,而[]把good和book
        合在一起,即goodbook,也就是说只要满足g,o,d,b,k其中任意一个字符就行了

          


    10)- 表示一个范围,与[]一起用
       如:trace("lLJ62-76DS5LFd-4Jlk-中国".match(/[a-z-]/g));
        [a-z-]其中,a-z中的"-"是一个元字符,表示从a到z的一个范围,而-转义后表示"-"字符


    3.元序列
    1){n}表示在它前面的字符或表达式必须重复n次,即次数=n
       如: /bo{2}/,其中o要重复2次,boo满足,boook不满足

    2){n,}表示在它前面的字符或表达式必须重复n次以上,即次数>=n,如果既满足n,又满足n+1,取n+1,即取最大的
       如: /bo{2,}/,其中o要重复2次以上,boo满足,boook也满足

    3){n,m}表示在它前面的字符或表达式必须重复n到m次以上,即n<=次数<=m,如果既满足n,又满足n+1,取n+1,即取最大的
       如: 
        trace("This Book is Good Boooooook BoxBx".replace(/Bo{2,6}/g,'哈'));
        返回:This 哈k is Good 哈ok BoxBx

        trace("This Book is Good Boook BoxBx".replace(/Bo{2,6}/g,'哈'));
        返回:This 哈k is Good 哈k BoxBx

    4)d 表示匹配数字字符,即0-9
       D 表示匹配非数字字符,与d,即除了0-9之外的字符
       w 表示匹配一个单词字符,即26个小写字母,26个大写字母,10个数字,和下划线
              W 表示匹配非单词字符,与w反义  
       s 表示匹配任意空白字符
         S 表示匹配任意非空间字符,与s反义


    4.标记
    i ignoreCase 忽略大小写
    g global   全局匹配
    m multiline 多行模式
    s dotall   指定元字符"."是否匹配" ",即" "也作为一个普通字符处理
       如:
        trace("this is a book kie".replace(/bo+k.kie/g,'哈'));
        trace("this is a book kie".replace(/bo+k.kie/gs,'哈'));//在这里, 被看成是一个普通字符

       返回:
        this is a book
        kie
        this is a 哈

    x extend   扩展模式,在扩展模式下,正则表示式的空白字符被忽略了,如/c _ d/ 的效果相当于 /c_d/  


    5.正则表达式的属性
    source 可得到正则表达式的匹配模式,如:trace(/dd/.source);输出:dd
    lastIndex 表示正则表达式在字符串中的起始匹配位置,只有当标记为g时才起作用

    6.正则表达式的方法
    exec(字符串) 返回一个Object
    test(字符串) 返回一个Boolean值

      

    2012/4/20 补充:

    AS3正则表达式只能匹配同一行的内容,如果匹配的内容分散到多行是匹配不到的;

    所以,如果必要应该先把换行符替换掉(content = content.replace(/ /gi, "");)

    然后再做其它匹配。

    转自:http://hi.baidu.com/wojiubaibudu/item/20259da5991a8cdd5bf1910f

  • 相关阅读:
    N的阶乘:高精度
    蓝桥杯历届试题 连号区间数:枚举(含样例解释)
    最大公共子串:DP
    IncDec序列:差分+贪心
    [ACM] hdu 1465 不容易系列之一(错排复习)
    写给现在,写给未来
    [ACM] hdu 2082 找单词 (母函数)
    [ACM] poj 1146 ID Codes(字符串的下一个排列)
    [ACM] hdu 2149 Public Sale (巴什博奕)
    [ACM] hdu 1846 Brave Game (巴什博奕)
  • 原文地址:https://www.cnblogs.com/DarkMaster/p/4027695.html
Copyright © 2020-2023  润新知