讲师中心 微信公众号
AI工具推荐 视频效率加速

PHP正则表达式贪婪匹配与非贪婪匹配区别实测

星婷酱_9590

星婷酱_9590

发布时间:2026-09-21 07:57:51

|

153人浏览过

|

来源于php中文网

原创

PHP正则默认贪婪匹配,.会匹配至最后一个闭合位置;加?变为.?才停在第一个闭合处,这关系到HTML、日志等解析是否跨段误捕。

php正则表达式贪婪匹配与非贪婪匹配区别实测

PHP 中的正则默认是贪婪匹配,.* 会吞掉中间所有内容直到最后一个匹配项;加个 ? 变成 .*? 才能停在第一个闭合位置——这不是风格偏好,而是解析 HTML、日志、JSON 片段时是否“跨段误捕”的分水岭。

为什么 preg_match() 只返回第一个贪婪匹配结果

因为 preg_match() 本身只找一次完整匹配,不负责遍历所有可能。哪怕你写的是 <div>.* 这种明显会覆盖多段的模式,它也只从左到右扫一遍,找到最长合法匹配就停。 <ul> <li>输入:<code>"<div>A</div> <div>B</div>"

  • preg_match('/<div>(.*)/', $str, $m) → <code>$m[1]"A
  • B",不是 "A"
  • 这不是 bug,是引擎按贪婪规则执行完就收手了
  • 想拿全部匹配要用 preg_match_all(),但前提是模式本身得支持“断开”
  • 非贪婪模式不是万能解药,要防 .*? 匹配空字符串

    .*? 在“可匹配零次”的前提下,极容易在边界处匹配到空串,尤其当后续模式可选或存在重叠时。

    • 错误写法:/(.*?)(\d+)?/ —— .*? 会优先匹配空,把 \d+ 全让给后面
    • 正确思路:明确限定左侧范围,比如用 [^ 替代 <code>.*?,避免无约束吞吃
    • 调试技巧:加 PREG_OFFSET_CAPTURE 看匹配起始位置,确认是不是卡在开头就结束了
    • PHP 8.0+ 支持 (*PRUNE) 等动词控制回溯,但日常建议先收紧字符集

    preg_match_all() 配合非贪婪才能真正提取多个片段

    单靠 .*? 不足以让 preg_match_all() 拿到所有目标——必须确保每次匹配后引擎能“跳过已匹配部分”,否则会原地重复匹配空或重叠内容。

    PHP
    PHP

    编写健壮的PHP代码,规避类型转换陷阱、数组怪癖及常见安全漏洞。

    下载

    立即学习PHP免费学习笔记(深入)”;

    • 安全写法:preg_match_all('/<div>([^/', $str, $m),用 <code>[^ 显式排除干扰符 <li>对比:<code>preg_match_all('/<div>(.*?)/', $str, $m) 在含换行或嵌套标签时可能漏匹配或崩溃 <li>注意 <code>.*? 默认不匹配换行符,需加 s 修饰符:/s,否则遇到 \n 就中断
    • 性能提示:嵌套使用 .*?(如 a.*?b.*?c)仍可能触发深度回溯,比固定字符类慢一个数量级
    • 最常被忽略的一点:PHP 的 PCRE 引擎对非贪婪的支持依赖 NFA 实现,而某些极端嵌套结构(如未闭合的引号内再套标签)会让 .*?.* 同样卡住——这时候该放弃正则,改用 DOM 或状态机解析。

    相关文章

    PHP8.2里strpos搜数组里的字符串为什么报错?

    PHP8.2里str_contains在if判断里怎么写最规范?

    PHP8.3中strripos和strpos到底有啥区别?

    PHP正则表达式入门:保姆级教程教你快速上手

    PHP7.4里strpos搜中文为什么返回的位置不对?

    PHP速学教程(入门到精通)
    PHP速学教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    上一篇:PHP8.1文件类型校验性能测试 下一篇:PHP8.3快速排序Windows环境怎么部署

    作者最新文章

    热门AI工具

    更多
    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    讯飞智作

    讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

    LibLibAI
    LibLibAI Hot

    一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    Seko
    Seko Hot

    一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

    UpDream
    UpDream Hot

    一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

    超级简历WonderCV

    一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

    墨刀AI
    墨刀AI Hot

    一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

    相关专题

    更多
    php文件怎么打开
    php文件怎么打开

    打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

    9004

    2023.09.01

    php怎么取出数组的前几个元素
    php怎么取出数组的前几个元素

    取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

    5481

    2023.10.11

    php反序列化失败怎么办
    php反序列化失败怎么办

    php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

    2015

    2023.10.11

    php怎么连接mssql数据库
    php怎么连接mssql数据库

    连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

    3388

    2023.10.23

    php连接mssql数据库的方法
    php连接mssql数据库的方法

    php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

    4074

    2023.10.23

    html怎么上传
    html怎么上传

    html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

    3191

    2023.11.03

    PHP出现乱码怎么解决
    PHP出现乱码怎么解决

    PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    4517

    2023.11.09

    php文件怎么在手机上打开
    php文件怎么在手机上打开

    php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    3522

    2023.11.13

    Vibeknow在线使用入口合集
    Vibeknow在线使用入口合集

    本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

    0

    2026.09.21

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    相关下载

    更多

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    MyEclipse学习中心
    MyEclipse学习中心

    共0课时 | 0人学习

    RabbitMQ 教程手册
    RabbitMQ 教程手册

    共0课时 | 0人学习

    3分钟内将Xdebug安装到PHP
    3分钟内将Xdebug安装到PHP

    共1课时 | 146人学习

    最新文章

    更多
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn