쩨이엠 개발 블로그

[ Java ] 자바 정규식 (Regular expressions) 본문

개발/JAVA

[ Java ] 자바 정규식 (Regular expressions)

쩨이엠 2021. 1. 19. 18:17
728x90
반응형

Assist를 보다보면 가끔씩 보이는 regex

정규식(Regular Expressions)만 제대로 이해해도 쓸 일이 많을 듯 하여 정리하기로 한다

 

 

정규표현식

Regular Expressions Description Example
. 임의의 문자 1개를 의미  
^ 시작을 의미한다
[] 괄호 안에 있다면 일치하지 않는 부정의 의미로로 쓰인다
^a : a로 시작하는 단어
[^a] : a가 아닌 철자인 문자 1개
$ $앞의 문자열로 문자가 끝나는지를 의미한다 a$ : a로 끝나는 단어
[] [] 괄호 안의 문자가 있는지를 확인한다 [ab][cd] : a,b중 한 문자와 c,d중 한 문자
-> ac ad bc bd 
- 사이의 문자 혹은 숫자를 의미한다 [a-z] : 알파벳 소문자 a부터 z까지
[a-z0-9] : 알파벳 소문자 전체,0~9 중 한 문자
| 또는 [a|b] : a 혹은 b
() 그룹 01 (0|1) : 01뒤에 0 또는 1이 들어간다
-> 010(o), 011(o), 012(x)
{} 개수 a{3}b : a가 3번 온 후 b가 온다
-> aab(x), aaab(o), aaaab(o)
\b 공백, 탭, ",", "/" 등을 의미한다 apple\b : apple뒤에 공백 탭등이 있다
-> apple juice (o), apple.com (x)
\B \b의 부정
공백 탭등이 아닌 문자인 경우 매치한다
apple\b
-> apple.com (o)
\d 0~9 사이의 숫자
[0-9]와 동일
 
\D \d의 부정
숫자가 아닌 어떤 문자, [^0-9]와 동일
 
\s 공백, 탭  
\S 공백, 탭이 아닌 문자  
\w 알파벳 대소문자+숫자+"_"
[a-zA-Z_0-9]와 동일
 
\W \w의 부정
[^a-zA-Z_0-9]
 

 

수량 표현식

Regular Expressions Description Example
? 앞의 표현식이 0개 이상이다 a1? : 1이 있을수도 없을수도 있다
-> a (o), a1(o), a2(o)
* 앞의 표현식이 0개 이상이다 a1* : 1이 있을수도 없을수도 있다
-> a (o), a1(o), a2(o)
+ 1개 이상이다 a1* : 1이 1개 이상있다
-> a (x), a1(o), a11(o)
{n} n개 있다 a{3} : a가 3개 있다
-> aa(x), aaa(o), aaaa(o)
{n, m} n개 이상 m개 이하 a{3,5} : a가 3개 or 4개 or5개 있다
-> aa(x), aaa(o), aaaa(o), aaaaaaa(o)
{n,} n개 이상(m제거) a{3,} : a가 3개 이상 있다
-> aa(x), aaa(o)

 

제일 많이 쓰이는 패턴은 역시 핸드폰번호

010 혹은 011(아직도 사용하는사람이 있긴 한듯하다) + 3자리 혹은 4자리 숫자 + 4자리 숫자 패턴

이 경우는 다음과 같이 쓸 수 있다


 01(0|1)-\d{3,4}-\d{4}
 010 또는 011 "-" 숫자가 3자리 혹은 4자리 "-" 숫자 4자리
 

 

 

 

 

 

 

Java 사용법

String.matches를 이용하면 pattern이 맞는지 확인할 수 있다

pattern을 적을 때 \ 이스케이프 문자를 앞에 써줘야 \d 등이 유효하다

 
 @Test
 public void example(){
    String pattern = "01(0|1)-\\d{3,4}-\\d{4}";
    
    assertTrue("010-8282-1234".matches(pattern));
    assertTrue("010-828-1234".matches(pattern));
    
    assertFalse("011-12-1234".matches(pattern));
 }
 

 

 

 

String.replaceAll(regex, changeString)을 이용하면 패턴에 맞는 글자를 changeString으로 변경할 수 있다

 
 @Test
 public void example1(){
    String pattern = "ab";

    String str = "abcabcdabcde";
    System.out.println(str.replaceAll(pattern, "*"));
 }
 

결과값

 
 *c*cd*cde
 
728x90
반응형
Comments