В регулярном выражении изменяется, когда вы добавляете знак вопроса в. +

Я просматривал старые 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 ! 

Итак, что же? делать в '(. +?)'? Я предполагаю, что он говорит что-то вроде «не соответствует остальному регулярному выражению», но я ищу подробное объяснение!

+ является жадным оператором; как можно больше. Следовательно,. .+ Будет соответствовать столько, сколько может, и допустить, чтобы остаток регулярного выражения соответствовал. Как только вы зададите знак вопроса +? , вы говорите движку регулярных выражений ( не жадничайте … как только вы найдете двойную цитату " … стоп, все готово).

? делает совпадение неживым , что означает, что выражение .+? будет соответствовать как можно меньшему количеству символов, чтобы совпадение регулярных выражений, а не совпадение как можно больше, что является поведением по умолчанию.