Java

정규표현식 regex ;

임혁진 2023. 11. 30. 17:15

정규표현식 이란?

=>문자열이 정해진 패턴으로 구성되어 있는지 검증해야 할 때, 사용한다.

ex) 이메일 , 전화번호 ;

 

\  , () , ? , * , + , {n} , {m, } , {m,n}

.  [] [^] ^ $  ( ) \w \W \s \S \d \D

자주 쓰는 패턴!!

\\d{3} => 연속된 숫자 3개를 찾음

\\w => '_' 와 영문자와 숫자 1개를 찾음 

\\w+ => 문자 여러개 

[0-9] -> 0-9 사이 숫자를 하나 찾음

[a-z] -> a-z 사이 소문자를 하나 찾음

[A-Z] -> A-Z 사이 대문자를 하나 찾음

\\. \\[ \\? =>  .[? 등 특정 문자를 찾

 

 

 

 

정규표현식의 주요 메소드와 설명

 

Pattern 클래스와 Matcher 클래스

 

기본사용법 -> Pattern p = Pattern.compile(pattern);

                       ->Matcher m = p.matcher(info);

 

정규표현식 예제

public class RegexEx01 {

 

public static void main(String[] args) {

 

/*

* [0-9] - 숫자0~9 1개

* [a-z] - 소문자a~z 1개

* [0-9a-zA-Z] - 숫자 알파벳 1개

* [가-힣] - 한글 1개

*

* ? 0번 또는 1번

* * 0번이상 나옴

* + 1번이상 나옴

*

* [0-9]? = 숫자가 안나오거나 1번 나온다

* [0-9]{3} = 숫자가 정확히 3번 나온다

* [0-9]{3,4} = 숫자가 3이상 4이하 나온다

* [0-9]{3, } = 숫자가 3이상 나온다

*

* \\특수문자 - 정규표현식에서 사용하는 특수문자를 문자로 나타내고 싶은경우

* \\w - _이거나 영문자

* \\W - 반대

*

* \\d - 숫자

* \\D - 숫자의 반대

*

* () 값들의 집합

*/

 

 

//여기에서 정확히 전화번호 형식만 찾아봄

String info = "30세/서울시 강남구/02-123-4567/010-1234-5678/aaa@naver.com";

 

//String pattern = "[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}";

String pattern = "\\d{2,3}-\\d{3,4}-\\d{4}";

 

//정규표현식을 적용

Pattern p = Pattern.compile(pattern);

Matcher m = p.matcher(info);

 

//find(), group(), start(), end()

while(m.find()) {

System.out.println("찾았다");

System.out.println("찾은문자:" + m.group() );

System.out.println("시작위치:" + m.start() );

System.out.println("끝위치:" + m.end() );

}

 

 

System.out.println("---------------------------------------");

 

//이메일형식

//String pattern2 = "[a-zA-Z0-9]+@[a-z]+\\.[a-z]+"; //^$ 시작끝을 나타내는데 생략이 가능함

String pattern2 = "\\w+@\\w+\\.\\w+";

 

Matcher m2 = Pattern.compile(pattern2).matcher(info);

 

while(m2.find()) {

System.out.println(m2.group());

}

}

}

 

 

정규표현식 예제2

매개변수가 정규표현식(regex)인 메소드 사용법

public class RegexEx02 {

 

public static void main(String[] args) {

 

//주민번호 패턴을 찾아서 마스킹처리하기

String info = "홍길당,30세,강남구,123123-1231231";

 

String pattern = "[0-9]{6}-[0-9]{7}";

 

//매개변수가 regex인 메서드는 정규표현식 패턴을 적용할 수 있다는 의미입니다

String result = info.replaceAll(pattern, "******-*******");

System.out.println(result);

}

}