请问,正则表达式的这个"|"符号
正则表达式:(19|20)\d{2}
这是用来检查日期的正则表达式,比如1987这个字符串就能匹配
我的问题是:
"|"符号为什么选择的是19或20,不是选择9或2呢?照理说应该是9或2啊?
------解决方案--------------------19|20\d{2}
这样是9或者2。
------解决方案--------------------
------解决方案--------------------
总结一下就是:| 只要碰不到结束的)或者下一个|的话,就会往下去匹配,知道匹配不上为止,也就是一个贪婪的模式
1L 说的这个
19|20\d{2}
会匹配 19 或 20\d{2}
------解决方案--------------------() 表捕获组
你的表达式没必要捕获组
所以可以这样写:
(?:19|20)\d{2}
或
(?n)(19|20)\d{2}
------解决方案--------------------
参考
正则表达式学习参考
2.2.7 分支结构(Alternation)
当一个字符串的某一子串具有多种可能时,采用分支结构来匹配,“|”表示多个子表达式之间“或”的关系,“|”是以()限定范围的,如果在“|”的左右两侧没有()来限定范围,那么它的作用范围即为“|”左右两侧整体。
举例:
“^aa|b$”在匹配“cccb”时,是可以匹配成功的,匹配的结果是“b”,因为这个表达式表示匹配“^aa”或“b$”,而“b$”在匹配“cccb ”时是可以匹配成功的。
“^(aa|b)$”在区配“cccb”时,是匹配失败的,因为这个表达式表示在“开始”和“结束”位置之间只能是“aa”或“b”,而“cccb”显然是不满足的。
3 正则表达式进阶