preg_replace('/http:///ftp:///', 'https://', $value);
http://
и ftp://
внутри $value
следует заменить на https://
Этот код дает ошибку:
preg_replace() [function.preg-replace]: Unknown modifier '/'
Что такое истинное регулярное выражение для этой задачи?
Попробуйте использовать другой разделитель, скажем #
:
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
Например, используйте другой символ разделителя, например «#».
preg_replace('#/http://|ftp://#', 'https://', $value);
И не путайте / и |
preg_replace('!(http://|ftp://)!', 'https://', $value);
Длинная история: Regexp должен быть заключен в разделители, и они должны быть уникальными внутри всего регулярного выражения. Если вы хотите использовать /, то остальные / -s внутри регулярного выражения должны быть экранированы. Это, однако, делает синтаксис немного уродливым. К счастью, вы можете использовать любой символ в качестве разделителя. ! отлично работает, как и другие персонажи.
Остальная часть регулярного выражения просто перечисляет два параметра, каждый из которых будет заменен вторым параметром.
preg_replace('|http:\/\/ftp:\/\/', 'https://|', $value);
Используйте это вместо этого:
preg_replace('-(http|ftp)://-', 'https://', $value);
Или
preg_replace('/(http|ftp):\/\//', 'https://', $value);