正则表达式中^和$默认匹配整个字符串首尾,启用多行模式后匹配每行首尾;\a、\z、\z则始终匹配整个字符串绝对首尾,不受模式影响。
正则表达式中,行首和行尾的匹配依赖于锚点 ^ 和 $,但它们的行为受“多行模式”(multiline mode)控制,并非总是按字面意思匹配整个字符串的开头和结尾。
^ 和 $ 默认只匹配整个字符串的边界
在默认(单行)模式下,^ 只匹配整个输入字符串的最开始位置,$ 只匹配整个字符串末尾(或末尾换行符前)。例如:
^abc$ 只能匹配单独一行且内容恰好是 abc 的字符串,不会匹配 "xxx\nabc\nyyy" 中的 abc。
开启多行模式后,^ 和 $ 匹配每行的起止
启用多行模式(如 JavaScript 的 /m 标志、Python 的 re.MULTILINE 或 re.M)后,^ 会匹配每个换行符 \n 后的位置(即每行开头),$ 匹配每个 \n 前的位置(即每行结尾)。
- 在文本
"line1\nline2\nline3"中,/^line\d$/m能分别匹配三行中的每一行 - 注意:不同语言对行分隔符的支持略有差异(如
\r\n、\r、\n),$通常只识别\n为行尾,除非引擎特别支持
\A 和 \Z 是真正的“全局”起止锚点
为避免多行模式干扰,多数引擎提供更严格的锚点:
-
\A总是匹配整个字符串最开头,不受多行模式影响 -
\Z匹配整个字符串结尾(允许结尾有最多一个换行符) -
\z(小写 z)严格匹配字符串绝对结尾,不容忍任何后续字符
例如:\A\d+\z 可安全用于验证字符串是否“完全由数字组成”,无论是否启用 m 标志。
实际使用建议
判断用 ^/$ 还是 \A/\Z,关键看需求:
- 想逐行处理日志或配置文件 → 开启多行模式,用
^和$ - 做完整字符串校验(如邮箱、密码格式)→ 优先用
\A和\Z或\z,避免意外匹配子串 - 注意某些语言(如 JavaScript)不支持
\A和\z,只能靠^+$加g或m标志组合模拟
不复杂但容易忽略。











