Computer Science/일반

정규표현식 (Regular Expression)

조용우 2024. 10. 21. 17:35

문자 집합

패턴 의미
a-zA-Z 알파벳
ㄱ-ㅎ가-힣 한글
0-9 숫자
. 모든 문자열 (줄바꿈 제외)
\d 숫자
\D 숫자 제외
\w 밑줄 문자 포함 영,숫자 = [a-ZA-Z0-9_]
\W \w 제외
\s space 공백
\S space 공백 제외
\특수문자 특수문자 (메타문자 \ ^ $ . | [ ] ( ) * + ? { })
\b 문자 경계 (사용 예제 참고)
\B \b 제외

\b 사용 예제


수량자

수량자 의미
a{n,m} a가 n번이상 m번이하 반복
a{n,} a가 n번 이상
a{n} a가 n번
a? a가 없거나 1개 = a{0,1}
a+ a가 1번 이상 반복 = a{1,}
a* a가 0번 이상 반복 = a{0, }
a*? a가 0개 = a{0}
a+? a가 1개 = a{1}

그룹

기호 의미
() 감싼 문자열 그룹화, 캡쳐링
(?: 패턴) 그룹화, 캡쳐링 x
(?=) 앞쪽 일치
(?!) !앞쪽 일치
(?<=) 뒤쪽 일치
(?<!) !뒤쪽 일치
(? <이름>) <>안에 그룹 이름 지정

캡쳐링이란?

 

추가 예정


자바 정규식

String 클래스 정규식 메서드

boolean matches(String regex) regex 패턴 매칭되는 값이 있는지 확인
String replaceAll(String regex, String replacement) 문자열 내 regex와 매치되는 모든 문자열 replacement로 변환
String[] split(String regex) regex 패턴과 매치되는 문자열을 구분자로 분할

Regex 패키지 클래스

java.util.regex

Pattern 클래스

compile(String regex) 정규표현식 패턴 작성
matches(String regex, CharSequence input) regex와 input가 일치하는지 확인 (전체 문자열이 일치해야 true 반환)
asPredicate() 문자열을 일치시키는 데 사용할 수 있는 술어 작성 ???
pattern() 컴파일된 정규표현식 String 형태로 반환
split(CharSequence input) input을 주어진 인자값 패턴에 따라 분리

 

Matcher 클래스

find() 패턴이 일치하면 true 반환, 불일치하면 false. 반복실행 시 일치하는 부분 다음부터 이어서 실행
find(int start) start index 위치 이후부터 매칭 검색
start() 매칭되는 문자열의 시작위치 반환
start(int group) 지정된 그룹이 매칭되는 시작위치 반환
end() input을 주어진 인자값 패턴에 따라 분리
end(int group) 지정된 그룹 매칭되는 끝위치의 다음 문자위치 반환
group() 매칭된 부분 반환
group(int group) 그룹화되어 매칭된 패턴 중 group번째 부분 반환
groupCount() 괄호로 지정해서 그룹핑한 패턴의 전체 갯수 반환
matches() 패턴이 전체 문자열과 일치할 경우 true 반환

자주 쓰이는 표현식

이메일

/^(?=[^_])+[₩w-.]+@[a-zA-Z0-9]+₩.[a-zA-Z0-9]+$/

 

주민등록번호

/^[\d]{2}(?:(?:0[13578]|1[02])(?:[0-2]\d|3[01])|(?:02(?:[01]\d|2[0-9]))|(?:0[469]|11)(?:[0-2]\d|30))[-/.][1-4]\d{6}$/

휴대폰 번호

/^01\d[-\s/]\d{3,4}[-\s/]\d{4}$/g

 

추가 예정


 

정규표현식 테스트 사이트

https://regexr.com/