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

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

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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。