首页/开发/正则与编码速查/行首行尾锚点的匹配语义
正则基础45 条

行首行尾锚点的匹配语义

脱字符与美元符号是零宽的起始与结束锚点,默认只匹配整段文本的首尾,打开多行模式后对每行首尾都成立。它们是整串校验与逐行处理的关键,也常与字符类内的取反写法混淆。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌​​​​‌‌​‌‌‌‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​‌‌​​​‌‌​​​​‌​‌‌‌​​‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

锚点不消耗字符

脱字符表示位置在文本或行的开头,美元符号表示位置在结尾。两个锚点都是零宽的:它们判断「当前位置合不合法」,不消耗任何字符,也不出现在匹配结果里。理解零宽这一点,就能解释为什么被锚点包住的替换可以只改内容不改边界。

单行与多行的差别

默认情况下,脱字符只匹配文本最开始、美元符号只匹配文本最末尾,即使文本里有换行。打开多行模式后,锚点改为在每一行的首尾都成立,这才是逐行处理时需要的语义。

基本信息

脱字符零宽断言,匹配文本或行的起始位置
美元符号零宽断言,匹配文本或行的结束位置
默认模式只匹配整段文本的首尾,中间换行处不成立
多行模式每行首尾均可匹配,Python 用 re.MULTILINE,JS 用 m 标志
末尾换行多数引擎允许美元符号匹配「末尾换行之前」的位置,字符串校验时要留意
反斜杠变体部分引擎提供只认绝对串首串尾的锚点写法,以官方文档为准

典型使用场景

  • 整串校验:模式首尾加上脱字符与美元符号,拒绝包含式匹配
  • 逐行提取配置项或日志字段,配多行模式对每一行生效
  • 删除行尾多余空白,用行尾锚点定位而不影响其他内容
  • 在文件开头或结尾插入内容,锚点保证只命中边界位置
  • 校验注释行格式:行首必须是注释符号

锚点的典型写法

锚点的典型写法
grep '^root' /etc/passwd        # 只看行首为 root 的行
grep 'bash$' /etc/passwd        # 只看行尾为 bash 的行
grep -v '^#' conf.ini           # 过滤掉注释行
grep -c '^$' conf.ini           # 统计空行数量
sed 's/[[:space:]]*$//' f.txt   # 删掉每行行尾的空白字符
awk '/^[ \t]*$/{n++} END{print n}' f.txt  # 用行首锚点统计纯空白行

锚点行为速查

写法含义适用场景
脱字符文本或行的开头行首校验、过滤注释行
美元符号文本或行的结尾行尾校验、清理尾部空白
两端同时使用整串或整行约束字段格式校验
多行模式下每个换行前后都成立逐行批处理
用美元符号做整串校验时要注意末尾换行的处理差异:部分语言对末尾带换行的字符串仍判定匹配,部分则要求使用绝对串尾锚点。校验严格字段时建议先去掉尾部空白再比对。
脱字符在字符类里写在首位是取反,不是锚点。同一个符号两种含义,取决于它在方括号内还是方括号外,写模式时最容易混淆的正是这一处。

易错点

  • 忘记加锚点导致校验变成「包含即通过」,非法字段只要含合法片段就能过
  • 把脱字符写在字符类首位还想表达行首,实际变成取反语义
  • 在多行文本上不加多行模式,锚点只对整段首尾生效,逐行规则全部落空
  • 依赖美元符号校验严格字段却不处理末尾换行,带换行的输入仍被判为合规

数据来源与参考

  • IEEE POSIX.1-2017 Base Definitions 第 9 章:锚点表达式
  • PCRE2 官方文档 pcre2pattern(3):行首行尾锚点与多行模式
  • Python 官方文档 re 模块:MULTILINE 与锚点说明

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/regex-anchor-caret-dollar.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌​​​​‌‌​‌‌‌‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​‌‌​​​‌‌​​​​‌​‌‌‌​​‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​