쓸만한 URL 정규식표현 ( Regular Expression )

2018-09-10T23:20:07+00:002018/09/06|

파이썬을 BeautifulSoup을 사용해서 A Tag의 링크정보를 얻어올 때, URL이 아닌 메일 또는 전화번호와 같은 값이 있을 수 있기 때문에 URL 정규식 표현을 찾다가

 

만족스러운 결과를 나타내는 정규식을 찾아서 포스팅합니다.

 

먼저 정규식은 아래와 같습니다.

 

(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$])

 

이 정규식을 테스트하기 위해서 파이썬 코드부터 작성하는 것은 귀찮기 때문에

 

Validation Check를 해주는 여러 웹사이트 중 괜찮은 사이트를 발견하여 테스트를 진행하였습니다.

 

주소는 https://regex101.com/ 입니다.

 

제공하는 기능은 아래의 그림과 같으며,  정규식에 대한 php, javascript, python, golang 등의 코드도 작성해줍니다.

 

 

아래의 화면은 위에서 설명한 정규식을 실행한 화면인데, 매칭되는 결과가 나오지 않습니다.

 

이유는 대소문자를 구분하기 때문입니다.

 

아래와 같이 insensitive 플래그를 체크해야 정상적으로 매칭됩니다.

 

insensitive 이외에 정규식에서 사용할 수 있는 플래그 값들은 다음과 같습니다.

 

플래그 속성 설명
g global 둘 이상의 일치 항목을 찾습니다.
i ignoreCase 일치하는 항목을 찾을 때 대/소문자를 구분하지 않습니다. 또한 AZ 및 az 문자에는 적용되지만 E 및 e와 같은 확장 문자에는 적용되지 않습니다.
m multiline 이 플래그가 설정되어 있는 경우 $와 ^은 각각 행의 시작 부분과 끝 부분을 찾을 수 있습니다.
s dotall 이 플래그가 설정되어 있는 경우 .(도트)는 개행 문자(\n)를 찾을 수 있습니다.
x extended 확장 일반 표현식을 사용할 수 있습니다. 패턴의 일부로 무시되는 공백을 일반 표현식에 입력할 수 있으며 이를 통해 일반 표현식 코드를 읽기 쉽게 입력할 수 있습니다.

 

아래 그림은 정상적으로 매칭된 결과를 나타내는 화면입니다.

 

위의 정규식을 코드로 생성하면 아래와 같습니다.

 

Leave A Comment