Java 정규 표현식(Regular Expression)
: 컴퓨터 과학의 정규 언어로부터 유래한 것으로 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 언어
전화번호, 주민등록번호, 이메일 등과 같이 정해져 있는 형식이 있고 사용자가 그 형식대로 제대로 입력했는지 검증을 해야하는 경우 정규표현식을 사용하여 쉽게 검증 가능하다.
정규표현식 사용 방법
java util.regex 패키지를 사용
Pattern 클래스와 Matcher 클래스를 주로 사용
Pattern 클래스
정규 표현식에 대상 문자열을 검증하는 기능으로 matches()메소드를 활용하여 검증
구조는 matches(regex, string) 이며, 일치하면 true, 그렇지 않으면 false를 리턴한다.
숫자 검증하는 예제
Pattern 클래스 주요 메소드
compile(String regex) | 주어진 정규표현식으로부터 패턴을 만듭니다. |
matcher(CharSequence input) | 대상 문자열이 패턴과 일치할 경우 true |
asPredicate() | 문자열을 일치시키는데 사용할 수 있는 술어를 작성 |
pattern() | 컴파일된 정규표현식을 String 형태로 반환 |
split(CharSequence input) | 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리 |
Matcher 클래스
: 대상 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 판별할 때 주로 사용
입력값으로는 CharSequence라는 새로운 인터페이스가 사용되는데 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위의 매칭 기능을 지원 받을 수 있음
Matcher 객체는 Pattern 객체의 matcher() 메소드를 호출하여 받아 올 수 있다.
영문자인지 검증하는 예제
Matcher 클래스 주요 메소드
matches() | 대상 문자열과 패턴이 일치할 경우 true |
find() | 대상 문자열과 패턴이 일치하는 경우 true, 그 위치로 이동 |
find(int start) | start 위치 이후부터 매칭 검색 |
start() | 매칭되는 문자열 시작 위치 반환 |
end() | 매칭되는 문자열 끝 다음 문자위치 반환 |
group() | 매칭된 부분을 반환 |
groupCount() | 패턴 내 그룹핑한 전체 갯수를 반환 |
자주 사용하는 정규 표현식
^[0-9]*$ | 숫자 |
^[a-zA-Z]*$ | 영문자 |
^[가-힣]*$ | 한글 |
₩₩w+@₩₩w+₩₩.₩₩w+(₩₩.₩₩w+)? | |
^₩d{2,3}-₩d{3,4}-₩d{4}$ | 전화번호 |
^01(?:0|1|[6-9])-(?:₩d{3}|₩d{4})-₩d{4}$ | 휴대전화 |
₩d{6} ₩- [1-4]₩d{6} | 주민등록번호 |
^₩d{3}-₩d{2}$ | 우편번호 |
정규표현식 문법
^ | 문자열 시작 |
$ | 문자열 종료 |
. | 임의의 한 문자(₩는 안됨) |
* | 앞 문자가 없을 수도 무한정 많을 수도 |
+ | 앞 문자가 하나 이상 |
? | 앞 문자가 없거나 하나 있음 |
[] | 문자의 집합이나 범위를 나타내며 두문자 사이에는 - 기호로 범위를 나타내며, []내에서 ^가 선행하여 존재하면 not을 의미 |
{} | 횟수 또는 범위 |
() | 괄호 안의 문자를 하나의 문자로 인식 |
| | 패턴 안에서 or 연산을 수행 |
₩ | 정규 표현식 역슬래스는 확장문자(역슬래시 다음에 일반문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그문자 자체를 의미) |
₩b | 단어의 경계 |
₩B | 단어가 아닌 것에 대한 경계 |
\A | 입력의 시작 부분 |
\G | 이전 매치의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\z | 입력의 끝 |
\s | 공백 문자 |
\S | 공백 문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | 숫자 [0-9]와 동일 |
\D | 숫자를 제외한 모든 문자 |
(?i) | 앞 부분에 (?!)라는 옵션을 넣어주게 되면 대소문자는 구분하지 않습니다. |
참고
https://coding-factory.tistory.com/529#recentEntries
'OOP > Java' 카테고리의 다른 글
Overloading) 오버로딩 시 생성자 에러(Constructor Class is already defined in Class) (0) | 2024.04.22 |
---|---|
Java의 Excepton클래스 종류 및 구조 (0) | 2024.04.17 |
Optional이란? (0) | 2023.11.24 |
Java JUnit vs Spring JUnit (0) | 2022.12.20 |
객체지향 4대 특성 (0) | 2022.07.31 |