单字符匹配用[],多字符模式匹配用|;[]高效且自动转义特殊字符,|支持字符串级匹配并具左优先级,混用时优先选[]+量词组合。
字符集用 [] 还是逻辑或用 |,关键看你要匹配的是「单个字符」还是「多个字符组成的整体」。选错会导致完全匹配不上,或者优先级混乱、结果意外。
当你只需要在某一个位置接受几个可选的单字符(比如字母 a/b/c、数字 0-9、符号 + - *),[] 是唯一正确且最轻量的选择。
[abc] 匹配一位:a 或 b 或 c[0-9] 匹配任意一位数字;[^ tn] 匹配任意非空白符. ? * + 在 [] 内自动失去元字符意义,无需转义(例如 [.*+] 就是字面匹配这三个符号)[] 是底层优化过的字符查找,比 | 快得多,尤其在长文本中反复扫描时[] 永远只匹配一个字符,所以像 "cat"、"dog"、"bird" 这类词级匹配,只能靠 |。
11|1|2 能正确捕获 "11";若写成 1|11|2,则永远只取到第一个 "1"
() 可控制作用域,比如 (https?|ftp)://,避免歧义别把空格和重复字符当“选项”塞进 []。
[11 2] 看似想匹配 "11" 或 "2",实际含义是字符集 {'1', ' ', '2'}——两个 1 被当作同一个字符,空格也被当成合法选项,导致匹配出一堆意外空格11|2(匹配字符串 "11" 或 "2")[^0-9] 表示“非数字”真实场景往往需要组合。比如匹配「以 A、B 或 C 开头,后跟两位数字」:
[ABC]d{2} —— 字符集 + 量词,清晰、高效、无歧义Ad{2}|Bd{2}|Cd{2} —— 冗余重复,维护成本高,且可能因分组引发捕获干扰| 拆开:当各分支结构差异大,比如 Jan|Feb|Mar 和 January|February|March 并存时