정규표현식(Regular Expression, Regex, Regexp)이란?
- 문자열을 처리하는데 사용되는 패턴 기반의 문자열(식)
- 특정 클래스(객체) 등을 사용하여 정규표현식에 부합되는지 여부 체크
- 유효성 검증(Validation Check)
- ex) 패스워드 유효성 검사, 전화번호 또는 이메일 양식 검사 등
- 응용 프로그램 뿐만 아니라 웹, 네트워크 프로그래밍 등에서 공통으로 사용 가능한 표준 표현식
- 자바, 웹(자바스크립트 등)에서 모두 활용 가능
정규표현식에 사용되는 패턴 문자 = 메타 문자(Meta Character)
- 특정 글자, 숫자, 기호 등과 함께 앞, 뒤에 특수한 규칙의 기호를 붙여 패턴 지정
일반적인 기호
- ^x
- x로 시작하는 문자열인지 판별
- ex) “x”,“xa”,“xxx”,“xab” 등(O)
- ex2) “y”,“ax”,“abx”등(X)
- ex3)^홍 ⇒ “홍길동”,“홍순이”(O),“김홍도”(X)
- x$
- x로 끝나는 문자열인지 판별
- ex) “x”,“ax”,“xxx”,“xxx”,”abx” 등(O)
- ex2) “xa”,“xab”등(X)
- ^x$
- x로 시작해서 x로 끝나는 문자열인 경우 (=x 1개만 존재하는 경우)
- “x”(O), “xy”(X), “x1”(X)
- .x
- x 앞에 1개의 문자가 포함되는 문자열
- ex) “ax”, “bx”, “abxy”등(O)
- ex) “xa”, “xb”, “x”등(X)
- x+
- x가 1번 이상 반복되는 문자열
- ex) “x”,“xx”,“xxx” 등(O)
- ex) “a”,“”등(X)
- x*
- x가 0번 이상 반복되는 문자열
- ex) “”, “a”, “x”, “xx”, “xxx” 등 사용 가능
- 주로 다른 패턴과 결합하여 사용
- x?
- x가 나올수도 있고, 나오지 않을수도 있는 문자열
- ex) “x”, “”, “a” 등 사용 가능(단독으로 사용시 아무 문자열이나 모두 해당)
- 주로 다른 패턴과 결합하여 사용
- x|y
- x 또는 y가 포함되는 문자열
- ex) “x”, “y”, “xy”, “ay”, “yb” 등 사용 가능
정규표현식 예시
- xa?y$
- 시작하는 문자열은 상관없음
- 문자열 내에서 x뒤에 a가 올수도 있고, 안 올수도 있음
- 반드시 마지막은 y로 끝나는 문자열
- ex) xy(O) ⇒ x가 포함되고, x뒤에 a는 없지만, y로 끝나는 문자열
- ex) xay(O) ⇒ x뒤에 a가 있고, y로 끝나는 문자열
- ex) hixy(O) ⇒ 첫번째 항목과 동일(시작은 상관없음)
- ex) hixzy(X) ⇒ y로 끝나지만, x와 y사이의 문자는 a또는 없어야함
- ex) xyz(X) ⇒ 뒤에 y가 있지만, y로 끝나지 않으면 안된다.
- x|a?y$
- 시작하는 문자열은 상관없음
- 문자열 내에서 x가 포함되거나 a?y$인 문자열
- ex) xy(O) ⇒ x가 포함됨
- ex) hixy(O) ⇒ x가 포함됨
- ex) ay(O) ⇒ a가 있고, a뒤에 y로 끝나는 문자열
- ex) ayz(X) ⇒ a뒤에 y가 있지만, y로 끝나지 않음
괄호 문자
- (xy)
- 소괄호 안의 내용(xy)이 그대로 포함되는 문자열(괄호안의 문자열 그룹화)
- ex) “xy”(O),“yx”(X),”axy”(O)
- x{n}
- x가 n번만큼 반복되는 문자열(정확히 n번 반복)
- ex) x{5} ⇒ “xxxxx”(O), “xxx”(X)
- ex) a1{5} ⇒ “a1a1a1a1a1”(O)
- x{n,}
- n번 이상 반복되는 문자열
- ex) x{3,} : 최소 x가 3번 이상 반복되어야함 ”xxx”(O), “xxxx”(O), “xx”(X)
- x{n,m}
- x가 n번 이상, m번 이하 반복되는 문자열
- ex) x{2,4} : x가 2번 이상, 4번 이하 반복 ”xx”(O),”xxx”(O),”xxxx”(O), ”xxxxx”(X)
- 대괄호[]는 괄호 내의 구성요소를 확인하는 용도로 사용
- 괄호 안의 내용 중 하나 이상을 확인
- [x] : x가 1개 포함되는 문자열
- [xy] : x 또는 y가 1개 포함되는 문자열
- [^x] : x가 포함되지 않은 문자열(대괄호 안에 ^사용시 부정의 의미)
- [x-y] : x부터 y까지의 문자 중 1개 포함하는 문자열 ex) [A-Z] : 대문자 A부터 대문자 Z까지 중 1개 문자를 포함하는 문자열 ex) [a-z] : 소문자 A부터 소문자 Z까지 중 1개 문자를 포함하는 문자열 ex) [0-9] : 숫자 0부터 숫자 9까지 중 1개 문자를 포함하는 문자열 ex) [가-힣] : 한글 1개 문자를 포함하는 문자열
- 주로 중괄호{}(반복횟수 지정)와 조합하여 사용됨 ex) [가-힣]{2,5} : 한글 2~5글자 (주로 이름 입력 확인 용도) ex) [A-Za-z]{2,8} : 영문자(대소문자) 2~8글자 ex) [A-Za-z]{2,8} : 영문자(대소문자) 2~8글자 ex) [A-Za-z0-9!@#$]{8,16} : 영문자 또는 숫자 또는 특수문자(!@#$) 8~16글자
- ex) 식별자 작성 규칙을 정규표현식으로 표현
- 첫글자 숫자 사용 불가(영문자, 한글, 특수문자 $ 또는 _만 사용)
- 특수문자 $ 또는 _만 사용
- 예약어 사용 불가(정규표현식으로 판별 불가)
- 대소문자 판별(정규표현식으로 판별 불가) 1번과 2번규칙을 적용하여 정규표현식으로 나타낼경우 ”^[A-Za-z가-힣$][A-Za-z가-힣0-9$]{0,}$”
예외문자
- \^
- ^기호를 시작 기호로 인식하지 않고, 일반 특수문자로 인식
- \d
- 숫자 1개([0-9]와 동일)
- \D
- 숫자가 아닌 것 1개 ([^0-9]와 동일)
- \s
- 공백문자
- \S
- 공백이 아닌 문자
- \w
- 영단어를 구성하는 요소 1개(알파벳, 숫자, _)
- \W
- 영단어가 아닌 구성요소 1개
유용한 정규표현식 예
- 한글이름 ^[가-힣]{2,5}$
- 한글이름(2글자~5글자 사이)
- 휴대폰 번호 ^(010|011)[-\s]?\d{3,4}[-\s]?\d{4}$
- 010 또는 011로 시작
- 전화번호 사이는 - 기호 또는 공백이 포함될 수도 있고, 포함되지 않을 수도 있음
- 두번째 자리는 3자리 또는 4자리 숫자
- 마지막 자리는 4자리 숫자로 끝
'JAVA' 카테고리의 다른 글
[JAVA] 키보드로부터 입력받은 데이터를 파일에 출력 (1) | 2023.12.07 |
---|---|
[JAVA] 객체 직렬화(Serialization) || 역직렬화(Deserialization) (0) | 2023.12.07 |
[JAVA] 자바의 기본 데이터 입출력 (0) | 2023.12.07 |
[JAVA] 자바 I/O - 모니터로부터 데이터를 출력하는 방법 2가지 (0) | 2023.12.07 |
[JAVA] 자바 I/O - 키보드로부터 데이터를 입력받아 처리하는 방법 5가지 (1) | 2023.12.05 |