正则表达式:(19|20)\d{2}
这是用来检查日期的正则表达式,比如1987这个字符串就能匹配
我的问题是:"|"符号为什么选择的是19或20,不是选择9或2呢?照理说应该是9或2啊?

解决方案 »

  1.   

    总结一下就是:| 只要碰不到结束的)或者下一个|的话,就会往下去匹配,知道匹配不上为止,也就是一个贪婪的模式
    1L 说的这个
    19|20\d{2}
    会匹配 19 或 20\d{2}
      

  2.   

    一个正确的正则肯定得有前面的括号啊,所以就没有细说
    19|20\d{2} 这个分为19 and 20\d{2}
    (19|20)\d{2} 这个分为19\d{2} and 20\d{2}
    以此类推
    | 的范围就是延伸到正则边界,或者括号边界,或者下一个|
      

  3.   

    () 表捕获组你的表达式没必要捕获组
    所以可以这样写:(?:19|20)\d{2}或
    (?n)(19|20)\d{2}
      

  4.   

    参考正则表达式学习参考2.2.7  分支结构(Alternation)
    当一个字符串的某一子串具有多种可能时,采用分支结构来匹配,“|”表示多个子表达式之间“或”的关系,“|”是以()限定范围的,如果在“|”的左右两侧没有()来限定范围,那么它的作用范围即为“|”左右两侧整体。举例:“^aa|b$”在匹配“cccb”时,是可以匹配成功的,匹配的结果是“b”,因为这个表达式表示匹配“^aa”或“b$”,而“b$”在匹配“cccb ”时是可以匹配成功的。“^(aa|b)$”在区配“cccb”时,是匹配失败的,因为这个表达式表示在“开始”和“结束”位置之间只能是“aa”或“b”,而“cccb”显然是不满足的。3       正则表达式进阶