Я использую этот preg_replace
echo preg_replace('/.*/','r','string');
Я ожидал, что это должно вывести r
Но выход
р-р
Может кто-нибудь объяснить, почему это эхо двух р?
Потому что preg_replace использует глобальный флаг и .*
сначала сопоставляет всю строку, а затем пустую строку в конце, и, следовательно, вы видите два раза r.
Если вы хотите заменить только строку, вы должны быть более явными с шаблоном. Например, вы можете использовать следующее ^.*
,
Другой вариант — добавить ограничение в preg_replace, чтобы заменить только первое совпадение:
preg_replace (‘/.*/’, ‘r’, ‘string’, 1)
Других решений пока нет …