Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未知修饰符'/';PHP中的错误_Php_Regex_Preg Replace - Fatal编程技术网

未知修饰符'/';PHP中的错误

未知修饰符'/';PHP中的错误,php,regex,preg-replace,Php,Regex,Preg Replace,http://和ftp://内部$value应替换为https:// 此代码给出错误: preg_replace('/http:///ftp:///', 'https://', $value); 此任务的真正正则表达式是什么?使用另一个分隔符,例如“#” preg_replace() [function.preg-replace]: Unknown modifier '/' 并且不要混淆/和|尝试使用不同的分隔符,比如说。: 或者(不太推荐)转义正则表达式中每次出现的分隔符: preg_r

http://
ftp://
内部
$value
应替换为
https://

此代码给出错误:

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

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

使用另一个分隔符,例如“#”

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

并且不要混淆/和|

尝试使用不同的分隔符,比如说

或者(不太推荐)转义正则表达式中每次出现的分隔符:

preg_replace('#http://|ftp://#', 'https://', $value);
此外,您正在搜索模式
http:///ftp://
这真的没有多大意义,可能你的意思是http:///ftp://

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

preg_replace('/http:\/\/|ftp:\/\//', 'https://', $value);
理解错误:
未知修饰符“/”

在你的正则表达式中/http:///ftp:///“,第一个
/
被视为起始分隔符,
之后的
/
被视为结束分隔符。现在我们知道我们可以为正则表达式提供修饰符来改变它的默认行为。一些此类修改器包括:

  • i
    :制作匹配的案例 麻木不仁
  • m
    :多行搜索
但是PHP在结束分隔符之后看到的是另一个
/
,并尝试将其解释为修饰符,但失败,导致错误

preg_replace
返回更改后的字符串

preg_replace('#(?:http|ftp)#', 'https', $value);
说来话长:Regexp需要用分隔符括起来,而这些分隔符在整个Regexp中必须是唯一的。如果要使用/,则需要转义regexp中剩余的/-s。然而,这使得语法看起来有点难看。幸运的是,您可以使用任何字符作为分隔符!作品很好,其他角色也一样

regexp的其余部分只列出了两个选项,其中任何一个都将替换为第二个参数。

使用此选项:

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


您是否正在收集我上面显示的
preg\u replace
的返回值?
preg_replace('!(http://|ftp://)!', 'https://', $value);
preg_replace('|http:\/\/ftp:\/\/', 'https://|', $value);
preg_replace('-(http|ftp)://-', 'https://', $value);
preg_replace('/(http|ftp):\/\//', 'https://', $value);