아주 옛날 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);
}
}
}
'Dev > php' 카테고리의 다른 글
[그누보드5] 주요 함수 정리... (0) | 2014.08.26 |
---|---|
[php] a href tag에서 url만 추출하고 <a> tag 제거 (0) | 2014.08.11 |
[php] const와 define() (0) | 2014.03.09 |
variable variables, 변수명을 runtime에 지정 (0) | 2014.02.14 |
php에서 SESSION에 object 저장하기 (0) | 2014.02.13 |