首页/开发/正则与编码速查/PHP 正则定界符与修饰符

PHP 正则定界符与修饰符

PHP 模式必须由定界符包裹,首字符即定界符、末尾需闭合,修饰符写在末尾定界符之后用于调整语义:i 忽略大小写、m 多行锚点、s 点号匹配换行、x 可读模式、u UTF-8、A 强制串首、D 严格串尾、U 反转贪心。模式内出现定界符必须转义或更换定界符。

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

PHP 正则定界符与修饰符

PHP 的模式不是裸字符串,而是用定界符包裹的表达式:第一个字符作为定界符,末尾必须用同一个字符收尾,定界符之外还能追加修饰符调整匹配语义。定界符与修饰符是 PHP 正则特有的两层书写约定,忘记闭合或在模式中出现未转义的定界符,都会让模式直接失效。

基本信息

定界符选择不能是字母、数字、反斜杠与空白字符,常用斜杠、井号与波浪号
成对形式使用成对符号时,右侧使用对应的闭合符号,模式内出现同类符号仍要注意转义
修饰符位置写在末尾定界符之后,多个修饰符可连写,顺序不影响语义
模式内冲突模式中出现与定界符相同的字符必须转义,或改用其他定界符

典型使用场景

  • 包含大量斜杠的模式:处理路径与 URL 时改用其他定界符可省掉大量转义
  • 忽略大小写匹配:域名与关键字匹配时启用忽略大小写修饰符
  • 多字节文本:处理中文与表情时启用 UTF-8 模式,避免按字节切分
  • 逐行处理:多行文本里让锚点按行生效,便于按行提取
  • 长模式维护:可读模式让模式可以分行书写并加注释,便于评审

定界符与修饰符用法

定界符与修饰符用法
preg_match('/^\d{4}$/', $year);              // 斜杠定界符,最常用
preg_match('#^/api/v1/#', $path);            // 换用井号,路径里的斜杠无需转义
preg_match('~^(?<user>\w+)~', $s, $m);      // 波浪号定界符,配合命名组
preg_match('/abc/i', 'ABC');                 // 忽略大小写
preg_match('/^a.+z$/s', $block);             // 点号匹配换行,用于跨行内容
preg_match('/^\w+$/u', '中文');               // UTF-8 模式,按字符处理多字节文本
preg_match('/ a \s+ b /x', 'a   b');         // 可读模式,空白被忽略
preg_match('/^abc/D', "abc\n");              // 末尾锚点严格匹配串尾
preg_quote($userInput, '#');                 // 与所选定界符配套转义

常用修饰符

修饰符作用注意
i忽略大小写折叠规则与字符集相关
m锚点按行生效影响行首行尾的含义
s点号匹配换行贪心量词的作用范围随之变大
x可读模式模式内真实空白需转义
uUTF-8 模式要求模式与主题为合法 UTF-8
A强制从串首匹配等同固定开头,不受多行影响
D末尾锚点严格匹配串尾不匹配末尾换行之前的位置
U反转量词的贪心方向影响所有量词,谨慎使用
定界符与转义函数必须配套:调用转义函数时把所用定界符一并传入,否则模式内出现该字符时仍然会破坏结构,这是拼接模式时很常见的遗漏。
修饰符组合会互相影响:可读模式让空白被忽略,若此时需要匹配真实空格必须显式转义;多行与末尾严格匹配的组合也会改变锚点行为,调整修饰符后要重新验证样本。

易错点

  • 忘记闭合定界符:模式直接失效,返回值是假值而不会给出明确提示
  • 模式内出现未转义的定界符:模式被提前截断,报出难以理解的语法错误,改用其他定界符可绕过
  • 用字母或数字当定界符:不符合规则,模式无法被解析
  • 把修饰符写进定界符内部:被当作普通字符参与匹配,规则静默失效
  • 启用可读模式后忘记转义真实空格:需要空格的位置不再匹配,规则变宽或变窄都不易察觉

数据来源与参考

  • PHP 手册:正则表达式定界符与修饰符说明
  • PHP 手册:preg_quote 与定界符参数
  • PCRE2 官方文档:模式修饰与编译选项

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/php-preg-delimiter-rules.html

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