zoukankan      html  css  js  c++  java
  • 正则表达式的一些匹配规则

    1,字面量字符和元字符


      大部分字符在正则表达式中,就是字面的含义,比如 /a/ 匹配 a, /b/ 匹配b。这种只表示它字面量含义的被称为字面量字符。

      除了字面量,还有一些字符有特殊含义,不代表字面意思,被称为元字符

        1,点字符(.)

          点字符匹配除回车( )、换行( )、行分隔符(u2028)和分段符(u2029)之外的所有字符     注:码点大于0xFFFF的Unicode字符不能被匹配,因为会被认为是两个字符。      

         2,位置字符

          ^ 表示字符串的开始位置,  $ 表示字符串的结束位置。

        3,选择符(|)

          竖线符号在正则中表示 ‘或关系’ , 即匹配其中之一即可。

        .............等等

    2,转义符


      正则中那些有特殊含义的元字符,如果要匹配它们本身,就要在前面加反斜杠。 比如要匹配 +, 就必须写成 +;

      在正则中,需要反斜杠转义的一共有12个字符: ^ .  [ $ ( ) | * + ? { \               注:如果使用RegExp方法生成正则,转义需要加两个斜杠,因为字符串需要先转义一次。

    3,特殊字符


       匹配回车符

       匹配制表符 tab

       匹配换行符

      v 匹配垂直制表符

      f  匹配换页符

       匹配null字符

    4,字符类


      字符类表示有一系列字符可供选择,只要匹配其中一个就可以。所有可供选择的字符放在中括号内,比如[abc] 表示 a b c之中任选一个。

      1,脱字符(^)

        如果方括号内的第一个字符为 ^ , 则表示取反。  [^]表示匹配一切字符。

      2,连字符(-)

        对于连续序列的字符,可以用-来进行简写。 a-z  0-9 A-Z  -u4e00-u9fa5

    5,预定义模式


      d 匹配0-9的数字, 相当于[0-9]

      D 匹配非0-9的字符。 相当于[^0-9]

      w 匹配任意字母数字下划线。 相当于[0-9a-zA-Z_]

      W 相当于w取反

      s 匹配空格(包括换行符、制表符、空格符), 相当于[ vf]

      S 相当于s取反

       匹配单词边界

      B 匹配非单词边界,即在词的内部

    6,重复类


     

      模式的匹配次数,使用大括号{ }表示,{n}表示重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次。

    7,量词符


     

      量词符用来设定某个模式出现的次数。

        ?问号表示某个模式出现0次或1次, 等同于{0, 1};

        *  星号表示出现0次或多次,等同于{0, } 

        + 加号表示出现1次或多次, 等同于{1, }

    8,贪婪模式


     

      量词符默认情况下都是最大可能匹配,即匹配到不能匹配为止,这种模式就叫贪婪模式

      /a+/ 表示匹配1个或多个a,那么到底会匹配几个a呢? 因为默认的是贪婪模式,所以会一直匹配到后面不是a为止。

      如果想将贪婪模式改为非贪婪模式,可以在量词后面加一个问号。这时候一旦满足条件,就不再往下匹配了。

      *?表示某个模式出现0次或者多次,采用非贪婪模式

      +?表示模式出现1次或者多次,采用非贪婪模式

    9,修饰符


     

        g 表示全局匹配

      i 表示忽略大小写

      m 表示多行模式。会修改^和$的行为。 加了m修饰符后,^和$会识别换行符( )

    10, 组匹配

      1,正则中的括号()表示分组匹配,括号中的模式表示分组中的内容。

        在正则表达式内部, 还可以使用 来引用括号匹配的内容, n是从1开始,表示对应顺序的括号

        /(.)b(.)1b2/.test('abcabc');           1匹配了第一个括号的a, 2匹配了第二个括号的c

      2,非捕获组

        (?:x)称为非捕获组,表示不返回该组匹配的内容。

      3,先行断言

        x(?=y)称为先行断言。x只有在y前面才匹配,y不计入匹配结果中。

      4,先行否定断言

        x(?!y) 为先行否定断言。 x只有不在y前面才匹配。

      

       用通俗的语句来解释上面的这些:

        x(?! y): x只有不在y前面才匹配

        x(?=a):  表示在a的前面 才匹配。

        x(?<= a): 表示a的后面才匹配

        x(?<! a): 表示需要不匹配某个模式,  与 (?!a)相反

     

    符加项----- 一些常用的正则: 

      1,邮箱:   /[w!#$%&'*+/=?^_`{|}~-]+(?:.[w!#$%&'*+/=?^_`{|}~-]+)*@(?:[w](?:[w-]*[w])?.)+[w](?:[w-]*[w])?/                 (饿了么官网input验证邮箱用的正则, 大厂出品应该没毛病吧!)

  • 相关阅读:
    设计教训。
    爆牙齿的世界杯日记(小组末轮AB组)
    [维多利亚2 MOD] RecoverMingV(Vic2版复明) V1.1.3(201254更新),兼容AHD 2.31beta
    [文明5建筑MOD] Gunpowder Magazine and Firecracker Workshop (火药库与爆竹坊)。祝大家春节快乐!
    IVY Bridge : There's more than 22nm(IVB的新指令)
    ID3D11DeviceContext::Dispatch与numthread笔记
    如何在各个版本的VC及64位下使用CPUID指令
    [x86]SIMD指令集发展历程表(MMX、SSE、AVX等)
    C++AMP的tiled_index线程编号属性笔记
    x264编码参数大测试:09 trellis(crf26)
  • 原文地址:https://www.cnblogs.com/wjyz/p/11023905.html
Copyright © 2011-2022 走看看