정규식 Regular expression 이용한 url 추출

2014. 8. 6. 04:03 from Dev/php

아주 옛날 cgi 짜던 시절(ㅋㅋ 나이 뽀록나겠네) Perl을 공부했던 때가 있었는데, 그때 정규표현식도 조금 봤었던 기억이 있네요. 시간이 흘러 얼마 전에 다시 필요해서 찾아보게 되었습니다. 

php에서 plain text로 입력을 받아서, 텍스트 안에 url이 있으면 a href를 생성해주는 일입니다.

그런데 예전이나 지금이나 url을 찾아내는 것은 난제네요. 

구글링 하다가 일목요연하게 비교 정리한 곳이 있어서 소개합니다. 

제목도 거창한 "In search of the perfect URL validation regex"  (http://mathiasbynens.be/demo/url-regex)!!!

저는 이 중에서 gruver v2 로 url이 있나 없나 체크한 후, 링크 걸어주기 전에 다시 filter_var로 검사하는 방식으로 구현해 보았습니다. 당장은 별 문제 없이 사용할 수 있을 것 같습니다.


$pattern = "#(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'.,<>?«»‘’]))#iS";
if (preg_match_all($pattern, $content, $matches)) {
    foreach ($matches[0] as $match) {
        if (filter_var($match, FILTER_VALIDATE_URL)) {
            $link_url = "{$match}";
            $content = str_replace($match, $link_url, $content);			
        }
    }
}


Posted by banasun :