자바 정규표현식(Regular expression)에 대해 알아보자.




  정규표현식이란?

Regular expression, 줄여서 Regex라고도 부른다. 특정한 패턴을 가진 문자열(String)을 표현하는데 사용하는 형식언어이다. 정규표현식을 이용하여 특정 패턴에 맞는 문자열을 찾아 바꾸거나, input값이 유효한지 체크하는 데에 주로 사용한다.



예를 들어 핸드폰번호로 010-3e88-2pe7과 같은 입력값은 말이 되지 않는다. 정규표현식을 이용해 입력값의 패턴이 유효한 패턴인지 validation이 가능하다.






자 그럼 자바에서는 정규표현식을 어떤식으로 사용할까?



s.matches("regex") : s가 regex 패턴과 일치하는지 확인

s.replaceFirst("regex","replacement") : 가장 먼저나온 regex를 replacement로 치환

s.replaceAll("regex","replacement") : regex와 일치하는 부분을 전부 replacement로 치환

s.split("regex") : regex를 기준으로 s를 잘라 배열에 집어넣음




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class HelloWorld {
 
    public static void main(String[] args) {
        
        String s1 = "Becca is genius";
        String s2 = "becca.kim@gmail.com";
        
        if(s1.matches("(?i)b\\D+$")){
            System.out.println("(?i)b\\D+$ 정규표현식 일치");
        }
        
        if(s1.matches("b\\D+$")){
            System.out.println("b\\D+$ 정규표현식 일치");
        }
                
        if(s2.matches("[a-z0-9\\.]+@[a-z0-9]+\\.[a-z]+")){
            System.out.println("정상적인 이메일 주소");
        }
        
        s1=s1.replaceFirst("[c]+""k");
        System.out.println(s1);
        
    }
}
cs

8번째 줄의 (?i)b\\D+$는 대소문자 구분없이 b로 시작하고 숫자가 아닌 문자들이 반복되다가 끝나는 문자열을 말한다. 만약에 s1 중간에 숫자가 하나라도 있으면 s1.matches("(?i)b\\D+$")는 false가 된다.


12번째 줄의 b\\D+$는 s1의 첫문자가 대문자이기 때문에 출력되지 않는다.


16번째줄의 [a-z0-9\\.]+@[a-z0-9]+\\.[a-z]+는 알파벳,숫자,마침표문자로 이루어진 아이디@알파벳들.알파벳들 패턴을 나타낸다.

* 위의 패턴이 우리가 사용하는 실제 이메일 주소 정규표현식은 아니다. 어떤 사이트는 이메일이 주소에 마침표를 허용하지 않을 수도 있고 _등의 특수문자도 더 사용 가능한 경우도 있다.



코드를 돌려보면 아래와 같은 결과가 나온다. 


정규표현식을 처음 접하면 조금 복잡해 보인다고 생각할 수도 있지만 몇번 직접 해보면 이해가 빠를 것이다. 비밀번호패턴, 주소, 핸드폰번호 등 여러가지 정규표현식을 아래의 사이트에서 연습해보는것을 추천한다.

http://regex101.com

+ Recent posts