PHP正则表达式模式修正符详解

林见深
林见深
发布时间:2026-10-14 | 2人浏览过
原创

PHP使用PCRE库处理文本,支持多种模式修正符来控制匹配行为。

什么是PCRE模式修正符

在PHP中,使用preg_系列函数进行正则表达式匹配时,模式字符串末尾可以添加额外的字符来改变默认行为。这些字符就是模式修正符(Pattern Modifiers)。它们紧跟在结束分隔符之后,用于调整匹配规则,如是否区分大小写、是否多行匹配、是否启用UTF-8等。

常用PCRE模式修正符

  1. i (PCRE_CASELESS): 忽略大小写
    设定后,模式中的字符将同时匹配大小写字母。例如:/pattern/i 会匹配 "Pattern"、"PATTERN" 等。
  2. s (PCRE_DOTALL): 点号匹配换行符
    未设定时,元字符 . 不匹配换行符;开启后,. 可匹配所有字符,包括换行符。等效于Perl的 /s 修正符。
  3. m (PCRE_MULTILINE): 多行模式
    开启后,^ 和 $ 不仅匹配字符串首尾,还匹配每行的开始和结束。适用于多行文本的行定位匹配。
  4. x (PCRE_EXTENDED): 扩展模式(允许注释)
    开启后,模式中未转义的空白字符被忽略,且 # 到行末的内容被视为注释。便于编写可读性强的复杂正则。
  5. u (PCRE_UTF8): UTF-8模式
    从PHP 4.3.5起推荐用于处理UTF-8编码字符串。若未设置,可能对中文等多字节字符匹配不准确。

进阶与特殊修正符

  • e (PREG_REPLACE_EVAL): 执行替换为代码(注意:仅 preg_replace() 支持)
    替换后的字符串会被当作PHP代码评估执行。由于存在安全风险,现代PHP版本已废弃此功能,建议使用 preg_replace_callback() 替代。
  • A (PCRE_ANCHORED): 强制锚定
    限制匹配只能从目标字符串起始位置开始。
  • D (PCRE_DOLLAR_ENDONLY): $ 仅匹配结尾
    若未设置 m,$ 默认也匹配换行符前的位置;设置 D 后,$ 只严格匹配字符串末尾。
  • U (PCRE_UNGREEDY): 非贪婪模式
    逆转量词的贪婪性,*?、+? 成为默认非贪婪。也可在模式中用 (?U) 或量词后加 ? 指定。
  • S: 性能优化分析
    对频繁使用的模式启用额外预分析以提升匹配速度。

注意事项

  • 使用 e 修正符存在代码注入风险,务必避免在新项目中使用。
  • 处理中文或其他多字节字符时,务必加上 u 修正符以确保正确解析UTF-8编码。
  • 多个修正符可组合使用,如 /pattern/isu。

以上就是PHP中正则表达式模式修正符的详细内容,更多关于PHP正则表达式的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表