2017-03-21 3 views
-1

I가 다음 preg_replace() 기능을 목표로 링크를 연결합니다 :정규식은 HTTP 교체 및 HTTPS

$link = preg_replace(
    "#http://([\S]+?)#Uis", '<a href="http://\\1">(link)</a>', 
    $link 
); 

그것은 http 링크 하지만 https 링크 분명히와 잘 작동합니다. 링크를 https과 함께 사용할 수 있도록 조정하려면 어떻게해야합니까?

$link = preg_replace(
    "#https?://\S+#i", '<a href="$0">(link)</a>', 
    $link 
); 

PHP demo

세부를 참조하십시오 :

답변

5

그냥 https?을 추가하고 전체 링크를 일치, 다음 대체 패턴에서 참조 할 수 $0 역 참조를 사용

  • https? - http 또는 https
  • :// - 리터럴 문자 시퀀스
  • \S+ - 하나 이상의 비 공백 심볼
  • i - 경우를 구분 개질제. U 수정이 혼란

주 (???로 기록 될 것이며, 패턴은 더 이상이된다), 그리고 나는 그것을 제거하는 것이 좋습니다.

수정자는 패턴에 .이 없다면 의미가 없으므로 중복되기 때문에 삭제하는 것이 좋습니다.

+1

정규식에서 배웠던 거의 모든 것들이 여기에 나와 있습니다. 너무 감사합니다. 질문이 하나 있습니다. URL 부분을 올바르게 식별하는 방식으로 정규식을 조정할 수있는 방법이 있습니까? 예를 들어, 다음의'$ link = 'hello http://example.com) world';를 사용하면 내 포인트를 얻으면 URL에')'부분을 추가 할 것입니다. –

+1

대체물에 '(link)'을 쓰지 않는 이유는 무엇입니까? – ManzoorWani

+0

원본 캡처를 유지해야한다고 생각했습니다. 맞습니다. 아마도 더 이상 필요하지 않습니다. –