2011-08-02 4 views
-1

현재 맞춤형 블로그 소프트웨어를 만들고 있습니다. 관리 패널에서 사용자가 게시물을 만들면 PHP는 내 패턴과 일치하는 모든 텍스트를 구문 분석하고 이에 따라 실제 하이퍼 링크로 바꿔야합니다. 간단한 게시물에 대해서는 잘 작동하지만 큰 게시물을 올리면 하이퍼 링크가 텍스트 링크보다 훨씬 더 많이 만들어지고 텍스트의 전체 단락으로 확장됩니다.PHP 정규 표현식 - 텍스트를 하이퍼 링크로 바꾸기

function TextToLinks($input) 
{ 
    $pattern = "/www\.(.*)\.(.*?)(\s|$)/"; 
    return preg_replace_callback($pattern, "Utilities::LinksCallback", $input); 
} 

function LinksCallback($matches) 
{ 
    return "<a href='http://{$matches[0]}'>{$matches[0]}</a>"; 
} 

나는 패턴이 더 엄격하게하는 방법을 작동하지 않을 수 있습니다

여기 내 PHP입니다.

도움 주셔서 감사합니다.

+0

가능한 중복 http://stackoverflow.com/questions/980902/regex-to-turn-urls-into-links- 기존 텍스트 링크 포함) – Gordon

+0

가능한 중복 http://stackoverflow.com/search?q=convert+text+urls+to+links+php – Gordon

답변

1

추가 욕심이없는 깃발 ?도 첫 번째 .*.

$pattern = "/www\.(.*?)\.(.*?)(\s|$)/"; 
[텍스트의 기존 링크와 함께 장난하지 않고 링크로 URL을 설정하는 정규 표현식 (의
+0

고맙습니다. 완벽하게 작동합니다. 한 캐릭터 만 필요합니다! – Lee

1

하이퍼 링크를 비교하는 좋은 방법은 아닙니다. 링크가 이미 형성되어 있다면 깨질 것입니다 (예 : 포스터가 이미 앞에 붙어 있습니다.) www.으로 시작하지 않는 모든 링크가 누락됩니다.

문제가되지 않는다면

\S는 공백이 아닌 문자를 일치시킬 수 있습니다. /\bwww\.(\S*)\.(\S*)\b/으로 도망하고, \b는 일치/시작하는 단어 경계에서 끝나는 주장한다. 더 배경 정보

, this blog post by Jan Goyvaerts를 참조하십시오.

+0

의견을 보내 주셔서 감사합니다. 나는 이것이 www 사용자로서 소프트웨어의 사용자에게는 문제가되지 않을 것이라고 생각했다. "더 멋지게"보일 때만 사용됩니다 : D – Lee

+0

그 경우, 당신은 그 정규 표현식으로 안심할 수 있습니다. –

+0

추가 정보 주셔서 감사합니다. 너무. 이러한 플래그는 매우 유용하며 더 긴 패턴에 대한 필요성을 대체하는 시간을 절약합니다. – Lee