2015-01-13 7 views
0

어떤 이유로 든 http 다음에 두 번째 백 슬래시가 누락 된 백래시가 삽입되는 함수를 작성하려고합니다. 고정 된 버전 만 반환하려는 경우, preg_replace를 사용하여 문자열의 특정 위치에 슬래시를 삽입하십시오.

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

예를

위해 나는이 한 줄의 코드에 preg_replace이다 해결 될 수 있다고 생각하지만, 나는 그것이 동작하지 않습니다. 'HTTP'일치와 \1에 배치되지 않는 것처럼 내가 다시 / /example.net 받고 있어요 : '/example.net HTTP'와

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

을 = $ URL을 사용.

제안 사항? 가능한 경우 콜백 및 익명 함수를 피하고 싶습니다. 이전 버전의 PHP에서 실행해야하기 때문입니다.

답변

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); 
+0

당신은 PHP와 함께 테스트 한? 난 그냥 코드를 실행하고 이전과 거의 같은 결과가있어 – Zed

+0

죄송합니다, 단지 테스트를 거친 코드가 업데이트되었습니다. – sanis

0

이 작동합니다 : 심지어

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

또는를 :

preg_replace('@^(https*:)@', '\1/', $url); 
관련 문제