정규식 (Regex)

정규식이란 텍스트 데이터 중에서 원하는 조건과 일치하는 문자열을 찾아내기 위해 사용된다.

정규식을 이용하면 원하는 데이터를 뽑아내거나 입력된 데이터를 검증할 수도 있다.

 

비밀번호 설정시 특수문자를 체크한다거나, 아이디를 영어+숫자 조합만 가능하게 설정하는 등 다양하게 활용이 가능하다.

 

 

 

정규 표현식 (Regular expression)

정규 표현식 역할
^ 문자열 시작
$ 문자열 종료
. 임의의 문자 [단 ‘'는 넣을 수 없습니다.]
* 앞 문자가 0개 이상의 개수가 존재할 수 있습니다.
+ 앞 문자가 1개 이상의 개수가 존재할 수 있습니다.
? 앞 문자가 없거나 하나 있을 수 있습니다.
[] 문자의 집합이나 범위를 표현합니다. -기호를 통해 범위를 나타낼 수 있습니다.
^가 존재하면 not을 나타냅니다.
{} 횟수 또는 범위를 나타냅니다.
() 괄호안의 문자를 하나의 문자로 인식합니다.
| 패턴을 OR 연산을 수행할 때 사용합니다.
\s 공백 문자
\S 공백 문자가 아닌 나머지 문자
\w 알파벳이나 문자
\W 알파벳이나 숫자를 제외한 문자
\d [0-9] 숫자
\D 숫자를 제외한 모든 문자
(?i) 대소문자를 구분하지 않습니다.

 

 

 

matches() 메서드 (정규표현식 패턴 검사)

해당 메서드와 정규식을 사용하여 문자열 비교 작업을 수행할 수 있다.

 

자주 쓰이는 것!!
^[0-9]*$ // 숫자
^[a-zA-Z]*$ // 영문
^[가-힣]*$ // 한글​
문자열변수.matches("정규식"); 

// 정규식에서 지정한 숫자,영문,한글 등만 있으면 true 다른 문자도 있으면 false
정규식도 자주 쓰인다면 String 변수에 넣어놓고 사용해도 된다.

String str = "12345";
String pattern = "^[0-9]*$";​


System.out.println(str.matches(pattern));
Pattern.matches();로도 사용 가능!

       String str = "12345";
       String pattern = "^[0-9]*$";

        System.out.println(str.matches(pattern));
        System.out.println(Pattern.matches(pattern, str));

 

 

package jokun.KH.test0629;

public class regex {
    public static void main(String[] args) {

        String str = "123";
        String str1 = "abc";
        String str2 = "가나다";
        String str3 = "123abc가나다";



        System.out.println(str.matches("^[0-9]*$") );
        System.out.println(str1.matches("^[a-zA-Z]*$") );
        System.out.println(str2.matches("^[가-힣]*$") );

        System.out.println(str3.matches("^[가-힣]*$") );

    }
}

 

 

 

String 배열에 사용 시 

원하는 문자를 뽑아내는 데 사용할 수 있다.

package jokun.KH.test0629;

public class regex {
    public static void main(String[] args) {

        //영문, 숫자, 한글이 담긴 배열 준비
        String[] array = {"a", "b", "c", "1", "2", "3", "가", "나", "다"};

        //나눠서 넣어줄 StringBuilder 생성
        StringBuilder str1 = new StringBuilder();
        StringBuilder str2 = new StringBuilder();
        StringBuilder str3 = new StringBuilder();


        for (String s : array){
            if (s.matches("^[0-9]*$")){ //들어온 배열이 숫자일 때
                str1.append(s); //str1에 숫자 저장

            } else if (s.matches("^[a-zA-Z]*$")) { //들어온 배열이 영문일 때
                str2.append(s); //str2에 영문 저장

            } else if(s.matches("^[가-힣]*$")){ //들어온 배열이 한글일 때
                str3.append(s); //str3에 한글 저장
            }
        }

        System.out.println("str1 : " + str1);
        System.out.println("str2 : " + str2);
        System.out.println("str3 : " + str3);
    }
}

문자를 이어 붙이고 싶을 때는 .toString() 사용!

 

복사했습니다!