늦은 프로그래밍 이야기

정규표현식 본문

내일배움캠프/Java 기초

정규표현식

한정규 2022. 11. 24. 21:56

정규표현식 (Regular Expresstion)

 - 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식.

 - 주로 전화번호, 이메일, 주민번호가 정상적으로 입력 되었는지 검증할 경우에 사용.

 - if문을 사용하면 가독성이 안좋아지고 코드의 길이가 길어지므로 정규표현식을 사용.

 

Pattern 클래스

 - Pattern 클래스의 matches() 메소드를 사용하여 해당 문자열의 패턴과 일치하는지 확인.

 - 문자열이 정규표현식에 매칭되면 true, 그렇지 않으면 false가 반환된다.

String pattern = "^[0-9]*$"; // 숫자만 등장하는지
String str = "123321"; 

boolean result = Pattern.matches(pattern, str);
System.out.println(result); // true
메소드 설명
compile(String regex) 정규표현식의 패턴을 작성합니다
matches(String regex, CharSequence input) 정규표현식의 패턴과 문자열이 일치하는지 체크합니다
일치할 경우 true, 일치하지 않는 경우 false를 리턴합니다

Matcher 클래스

 - Pattern 클래스와 비슷하지만 더 많은 비교관련 메서드를 제공.

 - Pattern 객체의 matcher() 메소드를 호출해서 사용한다.

Pattern pattern = Pattern.compile("^[0-9]*$");
String str = "04234234";

Matcher matcher = pattern.matcher(str);
System.out.println(matcher.find());
메소드 설명
matches() 정규표현식의 패턴과 문자열이 일치하는지 체크
일치할 경우 true, 일치하지 않는 경우 false를 리턴
find() 정규표현식의 패턴과 문자열이 일치하는지 체크합니다 그리고 그 위치로 이동
일치할 경우 true, 일치하지 않는 경우 false를 리턴
find(int start) start위치부터 find() 작업을 수행
group() 매칭된 부분 중 첫 번째 그룹을 리턴
group(int group) 매칭된 부분중 group번째 그룹을 리턴
groupCount() 매칭된 group의 전체 갯수를 리턴

정규표현식 문법

표현식 설명
^ 문자열 시작
$ 문자열 종료
. 임의의 한 문자(단 \은 넣을 수 없음)
* 앞 문자가 없을 수도 무한정 많을 수도 있음
+ 앞 문자가 하나 이상
? 앞 문자가 없거나 하나 있음
[ ]  문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냅니다. [] 내에서 ^ 가 선행하여 존재하면 not을 나타낸다.
{ }  횟수 또는 범위를 나타냅니다.
( ) 소괄호 안의 문자를 하나의 문자로 인식
| 패턴 안에서 or 연산을 수행할 때 사용
\ 정규 표현식 역슬래시(\)는 확장문자 (역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미)
\b 단어의 경계
\B 단어가 아닌것에 대한 경계
\A 입력의 시작 부분
\G 이전 매치의 끝
\Z 입력의 끝이지만 종결자가 있는 경우
\z 입력의 끝
\s 공백 문자
\S 공백 문자가 아닌 나머지 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\d 숫자 [0-9]와 동일
\D 숫자를 제외한 모든 문자
   
(?i) 앞 부분에 (?!)라는 옵션을 넣어주게 되면 대소문자는 구분하지 않습니다

자주쓰는 표현식

표현식 설명
^[0-9]*$ 숫자
^[a-zA-Z]*$ 영문자
^[가-힣]*$ 한글
\\w+@\\w+\\.\\w+(\\.\\w+)? E-Mail
^\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 기초' 카테고리의 다른 글

'==' 연산자와 .equals 의 차이  (0) 2022.11.24
continue, break  (0) 2022.11.22
연산자의 우선순위와 결합방향  (0) 2022.11.17
타입 변환  (0) 2022.11.17
실수의 표현 방식  (0) 2022.11.17
Comments