使用 preg_replace 在字符串中的特定位置插入斜线

Insert slash at specific place in string with preg_replace

我正在尝试编写一个函数,将反斜杠插入损坏的 URL 中,由于某种原因在 http 之后缺少第二个反斜杠,我只想 return 固定版本, 例如

 addSlash(http:/example.net) ->  http://example.net
 addSlash(https:/example.net`) -> https://example.net

我认为这可以用 preg_replace 一行代码解决,但我无法让它工作。使用 $url = 'http:/example.net' 和

preg_replace("@^(https?:)(.*?)@", "/", $url);

我回来了 / /example.net ,好像 'http' 不匹配并放入 .

有什么建议吗?如果可能的话,我想避免回调和匿名函数,因为在 PHP.

的旧版本上这应该是 运行
/^(https:|http:)?[\/](?![\/])(.*)/

类似的东西应该 work 适合你。

$re = "/^(https:|http:)?[\/](?![\/])(.*)/mi"; 
$str = "https:/regex101.com\nhttp:/regex101.com\nhttps://regex101.com"; 

$result = preg_replace($re, '//' , $str);

var_dump($result);

这应该有效:

preg_replace('@^(https*:)(/.*)@', '/', $url);

甚至:

preg_replace('@^(https*:)@', '/', $url);