본문 바로가기
JAVA

[JAVA] 정규표현식에 대해서 알아보자!(+자주쓰는 regex 이메일,주민번호 등)

by lumayi 2021. 10. 7.

(Regex를 검색하니 이런 이미지가 나와서 너무 귀여워서 가져왔당!

외계어같은 정규표현식 히히)

 

 

오늘은 코딩테스트를 하다가

[^0-9]이라는 처음보는 정규식을 배웠다.

 

일단 저 위의 정규식의 뜻은

0과 9사이의 숫자가 아닌 것이란 뜻이다.

 

하지만 ^이 문자는 분명 정규표현식의 시작을 알리는 거였는데?!

라는 생각에 바로 구글링을 해보았다.

 

 

원래 내가 알던 정규표현식은 이메일이나 주민번호 형식검사를 할 때,

구글링해서 Patter.matches()안에 넣는 형식이었는데

이렇게 코테를 볼 때도 저렇게 쉽게 쓸 수 있는 형식이 있다는 것을 알게 되었다.

 

 

그래서 정규표현식에 대해 제대로 정리해보려고 한다!

 

 

일단 이 표는 보통의 정규표현식을 쓴다고 할 때의

표현식의 문자가 가지는 의미이다!

 

표현식 의미
^x 문자열의 시작을 표현하며 x 문자로 시작됨을 의미한다.
x$ 문자열의 종료를 표현하며 x 문자로 종료됨을 의미한다.
.x 임의의 한 문자의 자리수를 표현하며 문자열이 x로 끝난다는 것을 의미한다.
x+ 반복을 표현하며 x 문자가 한 번이상 반복됨을 의미한다.
x? 존재여부를 표현하며 x문자가 존재할 수도, 존재하지 않을 수도 있음을 의미한다.
x* 반복여부를 표현하며 x문자가 0번 또는 그 이상 반복됨을 의미한다.
x|y or을 표현하며 x 또는 y 문자가 존재함을 의미한다.
(x) 그룹을 표현하며 x를 그룹으로 처리함을 의미한다.
(x)(y) 그룹들의 집합을 표현하며 앞에서부터 순서대로 번호를 부여하여 관리하고,
x,y는 각 그룹의 데이터로 관리된다.
(x)(?:y) 그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미한다.
x{n} 반복을 표현하며 x 문자가 n번 반복됨을 의미한다.
x{n,} 반복을 표현하며 x 문자가 n번이상 반복됨을 의미한다.
x{n,m} 반복을 표현하며 x 문자가 최소 n번이상 최대 m번 이하로 반복됨을 의미한다.

 

하지만 이것이 다가 아니었다!

 

정규표현식에 사용되는 특수기호를 Meta 문자라고 하는데,

여기서 [] 이 대괄호 Meta문자가 특별한 용도로 쓸 수 있는 문자였다!

 

아래의 표는 []처럼 위의 표와 다른 방법으로

정규식을 이용할 수 있는 특수문자이다!

 

표현식 의미
[xy] 문자 선택을 표현하며 x와 y중에 하나를 의미한다.
[^xy] ^은 not을 표현하며 x, y를 제외한 문자를 의미한다.
[x-z] range를 표현하며 x~z 사이의 문자를 의미한다.
\^ escape를 표현하며 ^를 문자로 사용함을 의미한다.
\b word boundary를 표현하며 문자와 공백사이의 문자를 의미한다.
\B non word boundary를 표현하며 문자와 공백 사이가 아닌 문자를 의미한다.
\d digit을 표현하며 숫자를 의미한다.
\D non digit을 표현하며 숫자가 아닌 것을 의미한다.
\s space를 표현하며 공백 문자를 표현한다.
\S non space를 표현하며 공백 문자가 아닌 것을 의미한다.
\t tab을 표현하며 탭 문자를 의미한다.
\v vertical tab을 표현하며 수직 탭길이의 문자를 의미한다.
\w word를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다.
\W non word를 표현하며 알파벳 + 숫자 + _가 아닌 문자를 의미한다.

 

그래서 오늘 코딩 문제처럼

문자열에서 알파벳을 제외한 모든 숫자와 특수기호들을 빼버리고 싶을땐

replaceAll("[^a-z]", "")를 써주면 알파벳(소문자)만 남게된다!

 

완전 편리!

특수기호 하나에도 뜻이 확 바뀌어버리니 주의해서 잘써봐야겠다~

 

배움이 즐거운 나날들이다!

 

 

 

+ 보너스) 자주 쓰는 정규표현식

 

숫자 모양에 대한 형식 검사
"^[0-9]*$"


영문으로만 구성되었는지에 대한 형식 검사
"^[a-zA-Z]*$"

  
한글로만 구성되었는지에 대한 형식 검사
"^[ㄱ-ㅎ가-힣]*$"

  
영문과 숫자로만 구성되었는지에 대한 형식 검사
"^[a-zA-Z0-9]*$"

  
한글과 숫자로만 구성되었는지에 대한 형식 검사
"^[ㄱ-ㅎ가-힣0-9]*$"

  
이메일 형식인지에 대한 검사. "아이디@도메인"의 형식을 충족해야 한다.
"[0-9a-zA-Z]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$"

  
"-"없이 핸드폰번호인지에 대한 형식검사.
"^01(?:0|1|[6-9])(?:\\d{3}|\\d{4})\\d{4}$"

  
"-"없이 전화번호인지에 대한 형식검사. 각 부분에 대한 자리수도 충족시켜야 한다.
"^\\d{2,3}\\d{3,4}\\d{4}$"

  
"-"없이 주민번호에 대한 글자수 및 뒷자리 첫글자가 1~4의 범위에 있는지에 대한 검사
"^\\d{6}[1-4]\\d{6}"

 

 

 

참고사이트:

https://hamait.tistory.com/342

https://highcode.tistory.com/6

 

반응형