두 질문, 두 패턴
"URL 매칭" 이 사실 두 다른 질문:
- 이 전체 문자열이 URL? (검증)
- 이 텍스트의 URL 찾기. (추출)
다른 패턴, 다른 anchor.
검증 패턴
^https?://[\w-]+(\.[\w-]+)+(/[\w./?%&=+#-]*)?$
http 또는 https 받음, 점 하나 이상 도메인 필수, optional URL 글자 허용 경로.
추출 패턴
자유 텍스트에서 URL 찾기엔 더 permissive 하되 명백한 단어 경계에서 멈춤:
https?://[^\s)]+
http(s):// 다음 공백 또는 닫는 괄호 아닌 거. 닫는 괄호 멈춤이 (https://example.com) 같은 markdown URL 이 trailing ) 포함하는 거 막음.
Trailing 구두점 문제
문장 끝 URL 이 trailing 점, 콤마, 괄호 픽업. 해결책: 그것들 제외하는 negated class, OR 매칭 후 코드에서 trailing 구두점 strip.
정규식으로 URL 완전 검증 시도 X
진짜 URL 검증은 messy: 스킴 변형, IP 리터럴, 포트 번호, 국제화 도메인, fragment encoding. "이 URL 파싱되고 resolve?" 면 본인 언어 URL 라이브러리: Python urllib.parse.urlparse, JavaScript new URL(...), Go net/url.