正则表达式中的“原子性”指匹配的最小不可分割单位,包括普通字符、转义元字符、通配类(如\d)、字符集整体及量词作用对象;每个原子严格按序匹配单个字符。

普通字符就是最直白的原子
字母、数字、下划线、标点(如 `-` `@` `*`),只要没被赋予特殊含义,就各自算一个原子。 比如模式 `cat` 实际由三个原子 `c`、`a`、`t` 顺序组成,必须连续出现、严格对应。注意大小写敏感:`Cat` 和 `cat` 是不同的原子序列;空格也算原子,`a b` 中的空格不能省略。
元字符要转义才变成字面原子
`.`、`*`、`+`、`?`、`^`、`$`、`[`、`]`、`\`、`|`、`(`、`)` 这些本身有功能,不能直接当普通字符用。 想让它们表示自己,就得加反斜杠转义:- `\.` 匹配一个真实的小数点,而不是“任意字符”
- `\$` 匹配美元符号 `$`,而不是“行尾”
- `\[` 匹配左方括号 `[`,而不是字符集起始符
特别提醒:在字符串里写正则时(比如 Python 的 `r"\."` 或 PHP 的 `'\.'`),反斜杠本身可能需要双重转义,别漏掉。
通配类原子代表一类字符
`\d`、`\w`、`\s` 这些是预定义的“类原子”,每个仍只匹配**单个**字符:- `\d` = `[0-9]`,匹配一位数字,不是一串数字
- `\w` = `[a-zA-Z0-9_]`,匹配一个字母、数字或下划线
- `\s` = 空格、制表符 `\t`、换行 `\n`、回车 `\r` 等中的任意一个
它们本身不可再拆分——`\d\d` 是两个原子,`\d{2}` 是一个原子加量词,语义不同。量词(如 `+`、`*`、`{2}`)永远作用于它前面的**那个原子**,不是整段模式。
字符集 `[...]` 整体算一个原子
`[aeiou]`、`[0-9]`、`[^a-z]` 这些方括号内容合起来才是一个原子,匹配其中**任意一个字符**。常见误区:
- `[abc]+` 表示“一个或多个 a/b/c 中的字符”,不是“匹配 abc 这个字符串多次”
- `[^x]y` 匹配“非 x 的字符 + y”,比如 `ay`、`1y`,但不匹配 `xy`
- 连字符 `-` 在 `[]` 里放中间才表示范围(如 `[a-z]`),放开头或结尾就是字面意义(如 `[-a]` 匹配 `-` 或 `a`)











