Я просматривал старые 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 !
Итак, что же? делать в '(. +?)'? Я предполагаю, что он говорит что-то вроде «не соответствует остальному регулярному выражению», но я ищу подробное объяснение!
+
является жадным оператором; как можно больше. Следовательно,. .+
Будет соответствовать столько, сколько может, и допустить, чтобы остаток регулярного выражения соответствовал. Как только вы зададите знак вопроса +?
, вы говорите движку регулярных выражений ( не жадничайте … как только вы найдете двойную цитату "
… стоп, все готово).
?
делает совпадение неживым , что означает, что выражение .+?
будет соответствовать как можно меньшему количеству символов, чтобы совпадение регулярных выражений, а не совпадение как можно больше, что является поведением по умолчанию.