[Daily Contents] 정규 표현식
정규 표현식(Regular expressions)
전화번호, 이메일 유효성 체크할 때나 복/붙해서 쓰는 것 아닌가?
- 개발에는 편집을 포함한 텍스트 관련 작업이 필수
- 선배들의 노하우가 담긴 파워풀한 도구
- 익숙해진다면 손 빠른 개발에 큰 도움을 줄 수 있다
- 온전한 프로그래밍 언어는 아님
- 다른 프로그래밍 언어나 제품에 포함된 '작은 언어'
- 제품마다 조금씩 다른 문법
- 텍스트를 찾고 조작하는데 쓰는 문자열
- 텍스트 검색, 치환에 사용
- 수십 라인의 프로그래밍 없이 정규식 1~2줄로 대부분의 문자열 작업 가능
- email, 주민번호, 생년월일 등의 형식 검증(validation)
- 데이터 전처리 작업
- 프로젝트 리팩토링 작업
- Database 검색, 치환 작업
- IDE, editor, 심지어 MS Word도 지원
- SW 엔지니어에게 '외국어'같은 존재
- 다양한 문제 해결법
- 친숙해진다면 파워풀한 도구
정규 표현식 온라인 테스트 도구
https://regexr.com
문자 하나 찾기
- 일반적인 문자 그대로 기재
- ’.’와 같은 메타 문자를 검색하려면 ‘'로 이스케이프
문자 집합으로 찾기
- 대괄호 ([])를 사용하여 문자 집합 표현
- [] 집합에 속한 문자 가운데 하나가 일치
- [] 내에 ‘-‘은 연속 요소를 표현 [1-5] -> [12345]
- 캐럿(‘^’) 문자는 집합 안에 있는 문자나 범위를 모두 제외
반복 찾기
- 파워풀한 정규 표현 패턴의 능력
- ’+’: 하나 이상 일치
- ’*’: 없거나 하나 이상 일치
- ’?’: 없거나 하나 일치
- 중괄호 ‘{}’ 내에 반복 횟수 기재 {3} : 3번
- 게으른 수량자로 문자를 최소로 일치
위치 찾기
- 텍스트 영역 내 특정 위치에서 검색 희망
- ‘\b’: 단어 경계
- ’^’: 문자열 경계의 시작
- ’$’: 문자열 경계의 끝
하위 표현식
- 큰 표현식 안에 속한 일부 표현식을 한 항목으로 다루도록 묶음
- ’()’: 괄호로 묶음 가능
- >{2,} vs (>){2,}
- 파워풀한 중첩된 하위 표현식
하위 표현식 - 역참조
- 하위 표현식으로 매칭된 타겟을 참조
- 일치한 부분을 반복해 찾거나 치환에 사용
- 텍스트를 검색하고 치환하는데 매우 유용
- ‘There is a ball on on the table.’ - 실수로 중복된 전치사?
전방 탐색
- 일치 영역을 발견해도 그 값을 반환하지 않는 패턴
- 실제로는 하위 표현식이며 같은 형식으로 작성
- (?=일치할 텍스트)
http://project.ssafy.com
ftp://pds.ssafy.com
https://lab.ssafy.com
/.+(?=:)/g
/(?<=\/\/).+/g
전후방 탐색 동시 사용
<head>
<title>SSAFY GIT</title>
</head>
/(?<=<title>).*(?=<\/title>)/g
역참조 조건 사용
- 정규 표현식 조건은 물음표(?)를 사용해 정의
- 역참조 조건은 이전 하위 표현식이 검색에 성공했을 경우에 한하여 다시 해당 표현식을 검사
-
(?(역참조)true false)
(02)2256-3112
(032)-789-3256
010-2679-9318
010 4321 1987
/(\()?\d{2,3}(?(1)\)|-)\d{3,4}-\d{4}/g
문제
- 전치사 2개가 각각 역순으로 반복 –> 정상으로
- There is a ball on the the on table
/(\w+)\*(\w+)\*\2*\1/g
정규 표현식 책 추천
손에 잡히는 정규 표현식
- AP 개발자에게 필요한 내용을 빠르게 습득 가능
- 마스터 레벨까지 커버하지는 못함
마지막으로
- 비 개발자도 알아두면 유용한 도구
- 텍스트를 다루는 모든 작업에 파워풀한 도구
- 이해가 아닌 체득의 영역
댓글남기기