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

时间:2015-01-13 14:41:52

标签: php preg-replace

我试图编写一个函数,它会在破坏的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上运行。

2 个答案:

答案 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);