Попробуйте использовать другой разделитель, скажем #
:
preg_replace('#http://|ftp://#', 'https://', $value);
или (менее рекомендуется) бежать каждое вхождение разделителя в регулярном выражении:
preg_replace('/http:\/\/|ftp:\/\//', 'https://', $value);
Также вы ищете шаблон http:///ftp://
который действительно не имеет большого смысла, может быть, вы имели в виду http://|ftp://
.
Вы можете сделать регулярное выражение короче:
preg_replace('#(?:http|ftp)#', 'https', $value);
Пониманием ошибки:Unknown modifier '/'
В своем регулярном выражении '/http:///ftp:///'
, первый /
считаются ограничителем, начинающими и /
после :
является рассматриваемый как конечный разделитель. Теперь мы знаем, что мы можем предоставить модификатору регулярное выражение, чтобы изменить его поведение по умолчанию. Некоторые такие модификаторы:
i
: сделать случай соответствия нечувствительны
m
: многострочный поиск
Но что PHP видит после закрытия разделитель другой /
и пытается интерпретировать он как модификатор, но не работает, что приводит к ошибке.
preg_replace
возвращает измененную строку.
$value = 'http://foo.com';
$value = preg_replace('#http://|ftp://#', 'https://', $value);
// $value is now https://foo.com
первый один не работает – James
Вы собираете возвращаемое значение 'preg_replace', как я показал выше? – codaddict