|叫做分支/选择符,含义:满足左边 或者 右边 其中一套规则,就算匹配成功,类似逻辑「或」。
A|B:匹配 A 或者 B- 优先级很低!
|把整个正则切成左右两大块,不是只作用于相邻字符。abc|def→abc或者defab(c|d)ef→abcef或abdef(加括号限定分支范围)
固话+手机号例子
\(?0\d{2}[) -]?\d{8}|1[35678]\d{9}
分成两大分支,由 | 隔开:
- 分支①(固话):
\(?0\d{2}[) -]?\d{8}\(?:可选左括号(0\d{2}:区号固定0开头,后面2位数字(020、010)[) -]?:可选字符:)、空格、-三者任选一个或者没有\d{8}:8位电话号码可以匹配:(020)12345678、020-12345678
- 分支②(手机号):
1[35678]\d{9}1:手机号开头固定1[35678]:第二位是3/5/6/7/8中任意一个\d{9}:后面9位数字可以匹配:13855488975
整个正则含义:匹配固话格式 或者 匹配手机号格式
举个错误示范:
cat|doggy
匹配 cat 或者 doggy,不是 catg / doggy
如果写成:
ca|doggy
只能匹配 ca 或者 doggy。
如果只想对一小段内容做分支,必须用括号分组 例:
gr(a|e)y等价gray|grey,匹配 gray 或者 grey
和字符集 [] 的区分
[abc]:单个字符,a / b / c 任选一个(字符集)a|b|c:完整规则分支,匹配a,或者匹配b,或者匹配c(分支条件)gr[ae]y等价gr(a|e)y,但不能写成gra|ey
小练习
正则:apple|banana 可以匹配哪些字符串? 答案 apple 、 banana 不能匹配 app、appl、banan
思考题: 写正则匹配单词 good 或者 great 参考答案 good|great