分支条件 |

| 叫做分支/选择符,含义:满足左边 或者 右边 其中一套规则,就算匹配成功,类似逻辑「或」。

  1. A|B:匹配 A 或者 B
  2. 优先级很低!| 把整个正则切成左右两大块,不是只作用于相邻字符。
    • abc|defabc 或者 def
    • ab(c|d)efabcefabdef(加括号限定分支范围)

固话+手机号例子

\(?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)12345678020-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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注