一尘不染

PHP中的未知修饰符“ /”错误

php

preg_replace(‘/http:///ftp:///', ‘https://’, $value);

http://ftp://$value应改为https://

此代码给出错误:

preg_replace() [function.preg-replace]: Unknown modifier '/'

什么是此任务的真正正则表达式?


阅读 150

收藏
2020-05-29

共1个答案

一尘不染

尝试使用其他定界符,例如#

preg_replace('#http://|ftp://#', 'https://', $value);

或(不建议使用)对正则表达式中每次出现的定界符进行转义:

preg_replace('/http:\/\/|ftp:\/\//', 'https://', $value);

另外,您正在搜索http:///ftp://的确没有太大意义的模式,可能就是您的意思http://|ftp://

您可以将正则表达式缩短为:

preg_replace('#(?:http|ftp)#', 'https', $value);

了解错误: Unknown modifier '/'

在您的regex中'/http:///ftp:///',第一个/视为开始定界符,/之后的:被视为结束定界符。现在我们知道可以为正则表达式提供修饰符以更改其默认行为。一些这样的修饰符是:

  • i :使匹配的大小写不敏感
  • m :多行搜索

但是PHP在结束定界符之后看到的是另一个,/并试图将其解释为修饰符,但失败了,从而导致错误。

preg_replace 返回更改后的字符串。

$value = 'http://foo.com';
$value = preg_replace('#http://|ftp://#', 'https://', $value);
// $value is now https://foo.com
2020-05-29