생계유지형 개발자/Etc.
[Java] 문자열에서 URL 찾아서 치환하기 (정규 표현식 제일 정확함)
이 가을
2023. 3. 23. 18:52
자바로 문자열에서 URL을 찾아서 다른 문자로 치환하는 기능이 필요했다.
당연히 인터넷 검색해서 이것저것 찾아봤는데 다양한 url 형식을 모두 찾아내는 정확한 정규식은 잘 없었다.
검색해서 찾은 것 + 내가 수정 및 변형해서 최종적으로 아래 정규식이 제일 정확했다.
문자열 속에서 2차, 3차 도메인과 쿼리스트링은 물론 URL에 한글 포함된 경우도 찾을 수 있다.
정규 표현식
Regular Expression
((http[s]?|ftp):\/\/)?(?:www\.)?[-a-zA-Z0-9@:%._\+~#=가-힣]{1,256}[:|\.][a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+,.~#?&\/=가-힣]*)
as a Java string
"((http[s]?|ftp):\\/\\/)?(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=가-힣]{1,256}[:|\\.][a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+,.~#?&\\/=가-힣]*)"
url 치환 소스코드 (자바)
/**
* 문자열에서 URL찾아서 A태그로 감싼다.
*
* @param origin
* @return
*/
public static String convertLinkToATag(String origin) {
String urlPattern = "((http[s]?|ftp):\\/\\/)?(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=가-힣]{1,256}[:|\\.][a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+,.~#?&\\/=가-힣]*)";
Pattern pt = Pattern.compile(urlPattern);
Matcher mc = pt.matcher(origin);
StringBuffer sb = new StringBuffer();
while (mc.find()) {
mc.appendReplacement(sb, Matcher.quoteReplacement( "<a class='clink' href='" + mc.group() + "' target='_blank'>" + mc.group() + "</a>"));
}
mc.appendTail(sb);
return sb.toString();
}