我正在浏览旧的 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/