我试图编写一个函数,它会在破坏的URL中插入一个反弹,由于某种原因在http之后缺少第二个反斜杠,我只想返回固定版本,例如
addSlash(http:/example.net) -> http://example.net
addSlash(https:/example.net`) -> https://example.net
我认为这可以通过一行代码中的preg_replace解决,但我无法使其工作。使用$ url =' http:/example.net'和
preg_replace("@^(https?:)(.*?)@", "\1/\2", $url);
我回复/ /example.net
,好像' http'未匹配并放入\1
。
有什么建议吗?我想尽可能避免回调和匿名函数,因为这应该在旧版本的PHP上运行。
答案 0 :(得分:0)
/^(https:|http:)?[\\/](?![\\/])(.*)/
这样的事情应work给你。
$re = "/^(https:|http:)?[\\/](?![\\/])(.*)/mi";
$str = "https:/regex101.com\nhttp:/regex101.com\nhttps://regex101.com";
$result = preg_replace($re, '$1//$2' , $str);
var_dump($result);
答案 1 :(得分:0)
这应该有效:
preg_replace('@^(https*:)(/.*)@', '\1/\2', $url);
甚至:
preg_replace('@^(https*:)@', '\1/', $url);