[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 개발자에게 필요한 내용을 빠르게 습득 가능
  • 마스터 레벨까지 커버하지는 못함

마지막으로

  • 비 개발자도 알아두면 유용한 도구
  • 텍스트를 다루는 모든 작업에 파워풀한 도구
  • 이해가 아닌 체득의 영역

댓글남기기