zoukankan      html  css  js  c++  java
  • 正则表达式

    1.正则表达式:普通字符和元字符(特殊字符)组成的【模式】
    2.特殊字符:
      【.】匹配除 " " 之外的任何单个字符。
           要匹配包括 ' ' 在内的任何字符,请使用象 '[. ]' 的模式。
      【w】匹配包括下划线的任何单个单词字符。等价于'[A-Za-z0-9_]'。
      【W】匹配任何单个非单词字符。等价于 '[^A-Za-z0-9_]'。
      【d】匹配一个数字字符。等价于 [0-9]。
      【D】匹配一个非数字字符。等价于 [^0-9]。
      【 】匹配一个换行符。等价于 x0a 和 cJ。
      【 】匹配一个回车符。等价于 x0d 和 cM。
      【s】匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [f v]。
      【S】匹配任何非空白字符。等价于 [^f v]。
      【 】匹配一个制表符。
      【】匹配一个单词边界,也就是指单词和空格间的位置。
            例如, 'er' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
                          可以匹配"never!"中的'er',即是单词末尾
      【B】匹配非单词边界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
      【^】 匹配输入字符串的开始位置。
            如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ' ' 或 ' ' 之后的位置。
            ^is即匹配字符串开始位置的is。
            "this is ..."中无法匹配  
            "is this is"则可以匹配开头的一个is,后续的不匹配
      【$】    匹配输入字符串的结束位置。
            正则"abzz$"  匹配字符串:"abzz"  不匹配  "abzzaa"
      【*】匹配之前的子表达式0或多次  'ab*' 匹配 abbbb  abb   ab  a
                                      '(ab)*' 匹配 abab  ababab 如果没有ab则也算匹配,但未匹配到内容
      【+】匹配之前的子表达式1或多次  'ab+' 匹配 abbbb  abb   ab
      【?】    匹配前面的子表达式零次或一次。  'ab?' 匹配 ab a
            例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
      【{n}】n 是一个非负整数。匹配确定的 n 次。
             例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
                   '(oo){2}' 匹配fooood
      【{n,}】n 是一个非负整数。至少匹配n 次。
              例如,'o{2,}' 不能匹配 "Bob" 中的 'o',
              但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
      【{n,m}】m 和 n 均为非负整数,其中n <= m。
               最少匹配 n 次且最多匹配 m 次。
               例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。
               请注意在逗号和两个数之间不能有空格。(is)({1,5}?)@is
      【?】当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,
           匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,
           而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
           例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
                 对于字符串 "isisd" (is){1,5}?d 匹配 isisd
                 如上误区:大家会误认为应该匹配isd而不是isisd。
                 正解:正则先匹配到一个串,如果是贪婪模式的话会尝试继续向右探索是否可以匹配更长
                       正则先匹配到一个串,如果是非贪婪模式,则不会继续向右探索。
                       所以,(is){1,5}?d先匹配到isisd,由于是非贪婪模式所以不再向右探索
                       贪婪与否是在匹配到第一个字串后,是否继续向右继续探索
           根据正解,在看一个实例:
           对于字符串"isxxxdasdfsfd"  正则:is.*d 匹配isxxxdasdfsfd
                                            正则:is.*?d 匹配isxxxd

      【(?!exp)】iw(?!d) 匹配"xxxiadzzaicc" 中的"ic"
               匹配后面跟的不是exp的位置,exp不匹配内容
               ia(?!c)   abcdedfiacsdffdfiab
      【(?<!exp)】(?<!d)iw  匹配"xxdiabzzaicc" 中的"ic"
               匹配前面不是exp的位置,表达式不匹配内容
      【(?=exp)】iw(?=d)   匹配"xxiadxxxibc"中的"ia"
               匹配后面跟的是exp的位置,exp不匹配内容
      【(?<=exp)】(?<=d)iw  匹配"xxdiaxxxbic"中的"ia"
               匹配前面跟的是exp的位置,exp不匹配内容
      【(?i)】表示不区分大小写
                (?i)abc 表示abc都忽略大小写   aBc ABC abC ABC
                a(?i)bc 表示bc忽略大小写
                a((?i)b)c 表示只有b忽略大小写
      【[]】是定义匹配的字符范围。
            比如 [a-zA-Z0-9_] 匹配任意一个英文字符和数字和下划线,等价于【w】
                 [a-z]匹配任意一个所有小写英文字符
                 a[0-9]b匹配a1b   a2b  
                 a[0-9]+b 匹配 a1b  a359b   a23495739857987985b
                 [^a-c] 匹配除了a b c之外的字符(在中括号中的【^】是【非】的意思)
    =========================================================================================================
    java正则:
        Pattern类:
            pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。
            Pattern p=Pattern.compile("abc");需要调用compile获得。
        Matcher类:
            Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,
            Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。
        PatternSyntaxException:
            PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
        
        //模式对象
        Pattern p=Pattern.compile("abc");
        //匹配对象:负责用模式对象 匹配 字符串=abcdef123456
        Matcher matcher = p.matcher("abcdef123456");
        while(m.find()){//find()从上次查找的位置之后继续向后查找与模式Pattern匹配的一个字符(串),第一次从第一个字符开始
            System.out.println(m.group());//本次查找匹配到的内容
        }
        System.out.println(m.find(10));//从索引为10的位置开始查找一个与模式匹配的字符(串)
        System.out.println(m.group());//find(10)所匹配到的字符
        
        
    JS正则:
          var str="Is this all there is?";
          //声明正则对象【/xxxx/】
          var patt1=/is/gi;//g=全局匹配   i=忽略大小写
          str.match(patt1);//查找是否含有匹配的字符,没有返回null
          patt1.exec("The best things in life are free")//查找是否含有匹配的字符,没有返回null
          var patt1=/[abc]/;
          patt1.test("The best things in life are free");//return true;没有返回false
          
          
          var regu =/^[1][3][0-9]{9}$/;
          console.log("13101161911".match(regu));
          console.log(regu.exec("18301161911"));
          console.log(regu.test("18301161911"));

  • 相关阅读:
    MySQL高可用之MHA的搭建
    MySQL MGR 集群搭建(单主模式&多主模式)
    ansible-playbook定义变量与使用
    linux LVM逻辑卷管理
    Oracle 19C RAC 静默(silent)安装on RHEL7.x
    Python语言基础02-变量和运算
    Python之路,Day6
    Python 之路 Day5
    Python之路,Day4
    Python之路,Day3
  • 原文地址:https://www.cnblogs.com/tiechui2015/p/11093178.html
Copyright © 2011-2022 走看看