정규 표현식, Regular Expression
- 특정한 패턴(규칙)을 가지는 문자열의 집합을 표현하는 식
- 특정한 패턴(규칙)을 가지는 문자열을 검색하는 용도
- 대다수 환경/프로그래밍 언어 등에서 지원한다.
- 유효성 검사에 유용하게 사용된다.
정규 표현식 구성요소
1. x
- x의 임의의 1개 문자
- 우리가 평소에 하는 검색
- ex) a > a
- ex) abc > abc
2. 출현 횟수
2.1 생략
- 바로 앞의 대상의 출현 횟수가 1
- 생략 안됨, 중복안됨
ex) a?bc > a에 특수기호가 붙어 있고, bc에는 없는 것처럼 보이지만 생략한 것도 정규표현식에 포함된다.
2.2 ?
- 바로 앞의 대상의 출현 횟수가 0~1
- 생략O, 중복X
ex) a?bc > a가 0~1번 출현한다.
- bc, abc, ab, aabc, bbbc 등이 검색된다.
ex) a?b?c : abc, bc, ac, c
"안녕 홍길동~ 길동아~"
ex) 홍?길동아? : 홍길동, 길동아
"자바코드가 있습니다. 그런데 코드에 에러가 자코드 있습니다."
ex) (자바)?코드 : 자바코드, 코드, 자코드
2.3 +
- 바로 앞의 대상의 출현 횟수가 1~무한대
- 생략X, 중복O
ex) a+bc : abc, aabc, aaaabc
"안녕 홍길동~ 길동아~"
ex) 홍+길동 : 홍길동
"자바코드가 있습니다. 그런데 코드에 에러가 자코드, 자바자바코드있습니다."
ex) (자바)+코드 : 자바코드, 자바자바코드
2.4 *
- 바로 앞의 대상의 출현 횟수가 0~무한대 > 가장 경우의 수가 많다
- 생략O, 중복O
ex) a*bc : bc, abc, aabc, aaaaabc
3. 선택, Choice
3.1 [열거값]
"제 나이는 12살 입니다. 우리 형은 21살 입니다."
ex) [12] : (제 나이)1,2 / (우리형)2,1
ex) [0123456789] : 모든 (한자리)숫자를 찾는다.
ex) [13579] : (한자리)홀수만 찾는다.
ex) [0123456789][0123456789][0123456789] : 모든 (세자리)숫자를 찾는다.
ex) [0123456789]+ : (한자리)~(여러자리) 숫자를 찾는다.
ex) 전화번호 > 010-xxxx-xxxx
010-[0123456789]?[0123456789][0123456789][0123456789]-[0123456789][0123456789][0123456789][0123456789]
010-1234-4567(o)
010-555-5555(o)
041-552-6019(x)
010-22-1111(x)
ex) 영어 소문자 > [abcdefghijklmnopqrstuvwxyz]+
ex) 모든 영문자 > [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+
***선택에서 연속된 문자를 간단하게 표현하는 방법 > 문자코드를 활용한다.
ex) 숫자 > [0123456789] > [0-9]
ex) 전환번호 > 010-[0-9]?[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]
ex) 영어 소문자 > [abcdefghijklmnopqrstuvwxyz] > [a-z]
ex) 영문자 > [a-zA-Z]
ex) '홍'씨 사람 > 홍[가-힣][가-힣]?
홍길동, 홍순신, 홍박사, 홍민
ex) 영문자+숫자 > [A-Za-z0-9]
ex) 식별자(변수명)로 적합한 문자 검사 > [A-Za-z0-9_]
3.2 [^열거값]
ex) [^0-9]+ > 숫자를 제외한 나머지 모든 문자
4. 출현 횟수(세밀)
- 바로 앞의 문자(집합)의 출현 횟수를 지정
- ?, +, * 보다 더 세밀한 패턴이 지정 가능
4.1 {n}
- n : 출연횟수
ex) a{3}bc > aaabc
4.2 {n,m}
- n : 최소 출현횟수
- m : 최대 출현횟수
ex) a{1,3}bc > abc, aabc, aaabc
ex) a{0,1}bc > bc, abc == a?bc
4.3 {n,}
- n : 최소 출현횟수
- 생략 : 최대 출현횟수 : 무한대
ex) a{2,}bc > aabc, aaaabc
잘 사용하니 외워둘 것!
주민등록번호
[0-9]{6}-[0-9]{7}
전화번호
010-[0-9]{3,4}-[0-9]{4}**
한글 2~4글자
[가-힣]{2,4}
ex) 영문자 5자 이상 + 첫문자가 대문자 (파스칼)
[A-Z][A-Za-z]{4,}
ex) 수업에서 사용하는 클래스명
[A-Z][A-Za-z0-9_]{1,}
5. 처음과 끝
5.1 ^
- 대상이 뒤의 표현으로 시작
- str.startWith("홍") 와 같음
ex) ^홍길동
5.2 $
- 대상이 앞의 표현으로 끝
- str.endWith("동") 와 같음
ex) 홍길동$
6. 줄임표현
6.1 \d or \D
- Digital > 숫자
- [0-9] == \d
- [^0-9] == \D
ex) 전화번호 : 010-\d{3,4}-\d{4}
6.2 \w or \W
- Word > 영어대소문자 + 숫자 + _
- [A-Za-z0-9_] == \w
6.3 \s or \S
ex) \s홍길동\s
ex) \s{1,}홍길동
이름 홍길동 님
이름 홍길동 님
홍길동입니다.
이름홍길동님
이미 만들어진 정규표현식 모음 사이트
https://regexlib.com/Default.aspx