php - 在正则表达式中,当您向 .+ 添加问号时会发生什么变化

标签 php regex

我正在浏览旧的 php 源代码,发现了一个我不理解的模式(可能是前段时间从互联网上复制/过去的......)。

这是一个将其与 php 一起使用的简单示例:

echo preg_replace('#color="(.+)"#', '$1', 'color="red" color="black"');
// Echo 'red" color="black', which is fine because the (.+) try to match the largest possible string.

echo preg_replace('#color="(.+?)"#', '$1', 'color="red" color="black"');
// Echo 'red black', why ? There is some black magic behind '(.+?)' I don't understand !

那么“?”是什么意思?在 '(.+?)' 中做什么? 我认为它说的是“不匹配正则表达式的其余部分”,但我正在寻找详细的解释!

最佳答案

+greedy运算符(operator);尽可能多地消耗。因此,.+ 将尽可能匹配,并且仍然允许正则表达式的其余部分匹配。一旦你指定了问号+?,你就告诉正则表达式引擎(不要贪婪..一旦你找到双引号...停下来,你就完成了。)

关于php - 在正则表达式中,当您向 .+ 添加问号时会发生什么变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25528452/

相关文章:

php - 使用 Joomla MVC 更新 MySQL 表行,

javascript - 如何为这种情况编写正则表达式

php - MYSQL PHP API - 在另一个表的行中显示和获取多行

php - 如何在 css 样式表中使用 if/else 条件?在制作动态页面并通过 php 使用用户的值时

javascript - 无论我尝试什么,请求的资源错误上均不存在 'Access-Control-Allow-Origin' header

regex - sed 条件替换变量

java - 使用 UCanAccess 查询 Access 数据库时的正则表达式匹配

c# - 特定 url 模式的正则表达式

regex - 如何在 CMake 中使用正则表达式的 {n} 语法

php - 如何在javascript中从CKEDITOR获取选定的html?