정규표현식(Regular Expression)
정규표현식 혹은 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어
텍스트 편집기나 스크립트 언어에서 문자열의 검색과 치환을 위해 지원
java.util.regex
패키지에 있는 클래스들을 사용
주로 Pattern 클래스와 Matcher 클래스가 사용
Pattern 클래스
java.util.regex.Pattern 클래스는 matches() 메소드를 지원
이 메소드를 이용하여 특정 문자열에 주어진 정규식에 매칭되는지 테스트를 할 수 있다.
String pattern = "^[0-9]*$"; // 숫자만 등장하는지
String str = "123321";
boolean result = Pattern.matches(pattern, str);
System.out.println(result); // true
matches() 메소드의 첫 번째 인자는 정규식, 두 번째 인자는 정규식이 매칭되는지 확인하는 문자열
문자열이 정규식에 매칭되면 true 안되면 false 가 리턴
compile(String regex); | 주어진 정규식으로부터 패턴 생성 |
matcher(CharSequence input); | 대상 문자열이 패턴과 일치할 경우 true 반환 |
asPredicate(); | 문자열을 일치시키는데 사용할 수 있는 Predicate 작성 |
pattern(); | 컴파일된 정규식을 String 형태로 변환 |
split(CharSequence input); | 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리 |
Matcher 클래스
Matcher 클래스는 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 체크할때 주로 사용
Pattern 클래스와 마찬가지로 Matcher 클래스는 생성자가 없다.
Matcher 객체는 Pattern 객체의 matcher() 메소드를 호출해서 얻는다.
Pattern pattern = Pattern.compile("^[0-9]*$");
String str = "04234234";
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.find());
pattern 객체의 matcher() 메소드를 호출해서 얻어온 Matcher 클래스를 이용한 코드
matches() | 대상 문자열과 패턴이 일치하는 경우 true 반환 |
find() | 대상 문자열과 패턴이 일치하는 경우 true 반환하고 그 위치로 이동 |
find(int start) | start 인자로 받은 위치부터 매칭 체크 |
start() | 매칭되는 문자열의 시작 위치를 반환 |
start(int group) | 지정된 그룹이 매칭되는 시작위치 반환 |
end() | 매칭되는 문자열의 끝 바로 다음 위치를 반환 |
end(int group) | 지정된 그룹이 매칭되는 끝 바로 다음 문자 위치를 반환 |
group() | 매칭된 부분 반환 |
group(int group) | 매칭된 부분 중 group번째 그루핑 매칭부분을 반환 |
groupCount() | 패턴내 그룹핑한 전체 갯수를 반환 |
정규식 문법
^ | 문자열의 시작 |
& | 문자열의 끝 |
. | 임의의 한 문자 |
* | 문자가 0번 이상 발생 |
+ | 문자가 1번 이상 발생 |
? | 문자가 0번 혹은 1번 발생 |
[] | 문자의 집합 범위를 나타냄 [0-9] : 숫자 (0부터 9까지) [a-z] : 알파벳 (a부터 z까지) 앞에 ^가 나타나면 not을 의미 |
{} | 횟수 또는 범위를 의미 |
() | 소괄호 안의 문자를 하나의 문자로 인식 |
| | or 조건 |
\ | 확장 문자의 시작 |
\b | 단어의 경계 |
\B | 단어가 아닌 것의 경계 |
\A | 입력의 시작부분 |
\G | 이전 매치의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\z | 입력의 끝 |
\s | 공백 문자 |
\S | 공백 문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | [0-9]와 동일 |
\D | 숫자를 제외한 모든 문자 |
자주 사용되는 정규식
^[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}$ | 우편 번호 |
'Java > Java' 카테고리의 다른 글
[Java] 클래스 선언 (0) | 2022.11.22 |
---|---|
Object-Oriented Programming(OOP) (0) | 2022.11.22 |
[Java] 람다식 (Lambda Expressions) (0) | 2022.11.20 |
[Java]문자열 함수 substr(), substring(), slice() (0) | 2022.11.20 |
[Java] 삼항 연산자 (0) | 2022.11.20 |
댓글